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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. package/README.md +96 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
  5. package/dist/agentSessions/BridgeHostInstance.js +14 -4
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
  7. package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
  8. package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
  9. package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
  10. package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
  11. package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
  12. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  13. package/dist/agentSessions/SessionJanitor.d.ts +34 -11
  14. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  15. package/dist/agentSessions/SessionJanitor.js +88 -44
  16. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  17. package/dist/agentSessions/SessionManager.d.ts +29 -9
  18. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  19. package/dist/agentSessions/SessionManager.js +62 -16
  20. package/dist/agentSessions/SessionManager.js.map +1 -1
  21. package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
  22. package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
  23. package/dist/agentSessions/conversationBrowsers.js +118 -0
  24. package/dist/agentSessions/conversationBrowsers.js.map +1 -0
  25. package/dist/agentSessions/sessionDeadline.d.ts +43 -0
  26. package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
  27. package/dist/agentSessions/sessionDeadline.js +68 -0
  28. package/dist/agentSessions/sessionDeadline.js.map +1 -0
  29. package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
  30. package/dist/auth/APIKeyScopeAuth.js +5 -4
  31. package/dist/auth/APIKeyScopeAuth.js.map +1 -1
  32. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  33. package/dist/auth/AuthProviderCatalogRouter.js +2 -0
  34. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  35. package/dist/auth/index.d.ts.map +1 -1
  36. package/dist/auth/index.js +51 -10
  37. package/dist/auth/index.js.map +1 -1
  38. package/dist/auth/initializeProviders.d.ts +10 -0
  39. package/dist/auth/initializeProviders.d.ts.map +1 -1
  40. package/dist/auth/initializeProviders.js +37 -1
  41. package/dist/auth/initializeProviders.js.map +1 -1
  42. package/dist/auth/localDevAuth.d.ts +79 -0
  43. package/dist/auth/localDevAuth.d.ts.map +1 -0
  44. package/dist/auth/localDevAuth.js +439 -0
  45. package/dist/auth/localDevAuth.js.map +1 -0
  46. package/dist/auth/loginEmailResolution.d.ts +41 -0
  47. package/dist/auth/loginEmailResolution.d.ts.map +1 -0
  48. package/dist/auth/loginEmailResolution.js +47 -0
  49. package/dist/auth/loginEmailResolution.js.map +1 -0
  50. package/dist/auth/magicLink/MagicLinkKeys.d.ts +51 -3
  51. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  52. package/dist/auth/magicLink/MagicLinkKeys.js +130 -13
  53. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  54. package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
  55. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  56. package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
  57. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  58. package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
  59. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  60. package/dist/auth/magicLink/MagicLinkService.js +221 -9
  61. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  62. package/dist/auth/magicLink/index.d.ts +1 -1
  63. package/dist/auth/magicLink/index.d.ts.map +1 -1
  64. package/dist/auth/magicLink/index.js +1 -1
  65. package/dist/auth/magicLink/index.js.map +1 -1
  66. package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
  67. package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
  68. package/dist/auth/magicLink/redeemLanding.js +7 -4
  69. package/dist/auth/magicLink/redeemLanding.js.map +1 -1
  70. package/dist/auth/magicLink/types.d.ts +39 -3
  71. package/dist/auth/magicLink/types.d.ts.map +1 -1
  72. package/dist/auth/magicLink/types.js +0 -4
  73. package/dist/auth/magicLink/types.js.map +1 -1
  74. package/dist/auth/newUsers.d.ts.map +1 -1
  75. package/dist/auth/newUsers.js +1 -0
  76. package/dist/auth/newUsers.js.map +1 -1
  77. package/dist/auth/sessionUserClone.d.ts +1 -1
  78. package/dist/auth/sessionUserClone.d.ts.map +1 -1
  79. package/dist/auth/sessionUserClone.js +3 -2
  80. package/dist/auth/sessionUserClone.js.map +1 -1
  81. package/dist/backgroundSweepConfigUnits.d.ts +231 -0
  82. package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
  83. package/dist/backgroundSweepConfigUnits.js +180 -0
  84. package/dist/backgroundSweepConfigUnits.js.map +1 -0
  85. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
  86. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
  87. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
  88. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
  89. package/dist/broadcast/index.d.ts +6 -0
  90. package/dist/broadcast/index.d.ts.map +1 -0
  91. package/dist/broadcast/index.js +6 -0
  92. package/dist/broadcast/index.js.map +1 -0
  93. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
  94. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
  95. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
  96. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
  97. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
  98. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
  99. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
  100. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
  101. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
  102. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
  103. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
  104. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
  105. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
  106. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
  107. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
  108. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
  109. package/dist/cache.d.ts +3 -2
  110. package/dist/cache.d.ts.map +1 -1
  111. package/dist/cache.js.map +1 -1
  112. package/dist/config.d.ts +1402 -8
  113. package/dist/config.d.ts.map +1 -1
  114. package/dist/config.js +120 -0
  115. package/dist/config.js.map +1 -1
  116. package/dist/context.d.ts +5 -1
  117. package/dist/context.d.ts.map +1 -1
  118. package/dist/context.js +64 -12
  119. package/dist/context.js.map +1 -1
  120. package/dist/coreRoutes.d.ts +3 -1
  121. package/dist/coreRoutes.d.ts.map +1 -1
  122. package/dist/coreRoutes.js +20 -4
  123. package/dist/coreRoutes.js.map +1 -1
  124. package/dist/generated/graphql-schemas/__mj.d.ts +863 -14
  125. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  126. package/dist/generated/graphql-schemas/__mj.js +4167 -62
  127. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  128. package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
  129. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  130. package/dist/generic/CacheInvalidationResolver.js +154 -79
  131. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  132. package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
  133. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  134. package/dist/generic/OrphanedConversationDetailReconciler.js +29 -1
  135. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  136. package/dist/generic/PubSubManager.d.ts +10 -0
  137. package/dist/generic/PubSubManager.d.ts.map +1 -1
  138. package/dist/generic/PubSubManager.js +44 -1
  139. package/dist/generic/PubSubManager.js.map +1 -1
  140. package/dist/generic/PushStatusResolver.d.ts +39 -6
  141. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  142. package/dist/generic/PushStatusResolver.js +93 -11
  143. package/dist/generic/PushStatusResolver.js.map +1 -1
  144. package/dist/generic/ResolverBase.d.ts +114 -29
  145. package/dist/generic/ResolverBase.d.ts.map +1 -1
  146. package/dist/generic/ResolverBase.js +509 -220
  147. package/dist/generic/ResolverBase.js.map +1 -1
  148. package/dist/generic/RunViewResolver.d.ts +15 -3
  149. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  150. package/dist/generic/RunViewResolver.js +126 -20
  151. package/dist/generic/RunViewResolver.js.map +1 -1
  152. package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
  153. package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
  154. package/dist/generic/actionOutputFieldSecurity.js +47 -0
  155. package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
  156. package/dist/generic/fieldSecurityTransport.d.ts +30 -0
  157. package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
  158. package/dist/generic/fieldSecurityTransport.js +30 -0
  159. package/dist/generic/fieldSecurityTransport.js.map +1 -0
  160. package/dist/index.d.ts +4 -0
  161. package/dist/index.d.ts.map +1 -1
  162. package/dist/index.js +262 -84
  163. package/dist/index.js.map +1 -1
  164. package/dist/integration/ConnectionPause.d.ts +121 -0
  165. package/dist/integration/ConnectionPause.d.ts.map +1 -0
  166. package/dist/integration/ConnectionPause.js +183 -0
  167. package/dist/integration/ConnectionPause.js.map +1 -0
  168. package/dist/integration/CustomColumnPromoter.d.ts +72 -6
  169. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  170. package/dist/integration/CustomColumnPromoter.js +93 -47
  171. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  172. package/dist/integration/EntityMapLifecycle.d.ts +78 -4
  173. package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
  174. package/dist/integration/EntityMapLifecycle.js +199 -5
  175. package/dist/integration/EntityMapLifecycle.js.map +1 -1
  176. package/dist/integration/InactiveRowWarnings.d.ts +31 -0
  177. package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
  178. package/dist/integration/InactiveRowWarnings.js +29 -0
  179. package/dist/integration/InactiveRowWarnings.js.map +1 -1
  180. package/dist/integration/ObjectNamesByID.d.ts +28 -0
  181. package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
  182. package/dist/integration/ObjectNamesByID.js +87 -0
  183. package/dist/integration/ObjectNamesByID.js.map +1 -0
  184. package/dist/integration/PostRestartIntrospect.d.ts +26 -0
  185. package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
  186. package/dist/integration/PostRestartIntrospect.js +27 -0
  187. package/dist/integration/PostRestartIntrospect.js.map +1 -0
  188. package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
  189. package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
  190. package/dist/integration/RSUPostRestartProgress.js +323 -0
  191. package/dist/integration/RSUPostRestartProgress.js.map +1 -0
  192. package/dist/integration/RSUProgressBridge.d.ts +41 -2
  193. package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
  194. package/dist/integration/RSUProgressBridge.js +84 -1
  195. package/dist/integration/RSUProgressBridge.js.map +1 -1
  196. package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
  197. package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
  198. package/dist/integration/RunArtifactAuthorization.js +45 -0
  199. package/dist/integration/RunArtifactAuthorization.js.map +1 -0
  200. package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
  201. package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
  202. package/dist/integration/SchemaRefreshLaunch.js +3 -2
  203. package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
  204. package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
  205. package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
  206. package/dist/integration/ScopedFieldsForBuild.js +91 -0
  207. package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
  208. package/dist/integration/TargetConfigGuard.d.ts +40 -0
  209. package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
  210. package/dist/integration/TargetConfigGuard.js +40 -0
  211. package/dist/integration/TargetConfigGuard.js.map +1 -0
  212. package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
  213. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  214. package/dist/logging/variablesLoggingMiddleware.js +50 -1
  215. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  216. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
  217. package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
  218. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
  219. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
  220. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
  221. package/dist/realtimeSessions/ownedRealtimeSession.js +14 -6
  222. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
  223. package/dist/realtimeSessions/sessionAccess.d.ts +103 -11
  224. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  225. package/dist/realtimeSessions/sessionAccess.js +147 -22
  226. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  227. package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
  228. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
  229. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
  230. package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
  231. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
  232. package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
  233. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
  234. package/dist/realtimeSessions/verificationWorkflow.js +1 -1
  235. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
  236. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  237. package/dist/realtimeWidget/WidgetRouter.js +19 -3
  238. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  239. package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
  240. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  241. package/dist/realtimeWidget/WidgetSessionService.js +203 -19
  242. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  243. package/dist/realtimeWidget/host-identity.d.ts +1 -1
  244. package/dist/realtimeWidget/host-identity.js +1 -1
  245. package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
  246. package/dist/realtimeWidget/visitorIdentity.js +1 -0
  247. package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
  248. package/dist/realtimeWidget/widgetCore.d.ts +20 -1
  249. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  250. package/dist/realtimeWidget/widgetCore.js +21 -8
  251. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  252. package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
  253. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  254. package/dist/realtimeWidget/widgetGuestElevation.js +3 -1
  255. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  256. package/dist/requestOrigin.d.ts +22 -0
  257. package/dist/requestOrigin.d.ts.map +1 -0
  258. package/dist/requestOrigin.js +60 -0
  259. package/dist/requestOrigin.js.map +1 -0
  260. package/dist/resolvers/ActionResolver.d.ts +19 -1
  261. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  262. package/dist/resolvers/ActionResolver.js +63 -12
  263. package/dist/resolvers/ActionResolver.js.map +1 -1
  264. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  265. package/dist/resolvers/AdhocQueryResolver.js +1 -0
  266. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  267. package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
  268. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  269. package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
  270. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  271. package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
  272. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  273. package/dist/resolvers/AgentSessionResolver.js +44 -17
  274. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  275. package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
  276. package/dist/resolvers/AutotagPipelineResolver.js +2 -1
  277. package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
  278. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  279. package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
  280. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  281. package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
  282. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  283. package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
  284. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  285. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
  286. package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
  287. package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
  288. package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
  289. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
  290. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  291. package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
  292. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  293. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  294. package/dist/resolvers/FileCategoryResolver.js +1 -0
  295. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  296. package/dist/resolvers/FileResolver.d.ts +5 -0
  297. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  298. package/dist/resolvers/FileResolver.js +13 -4
  299. package/dist/resolvers/FileResolver.js.map +1 -1
  300. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  301. package/dist/resolvers/GetDataResolver.js +34 -13
  302. package/dist/resolvers/GetDataResolver.js.map +1 -1
  303. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
  304. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  305. package/dist/resolvers/IntegrationDiscoveryResolver.js +2713 -1290
  306. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  307. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  308. package/dist/resolvers/MCPResolver.js +13 -2
  309. package/dist/resolvers/MCPResolver.js.map +1 -1
  310. package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
  311. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  312. package/dist/resolvers/MergeRecordsResolver.js +31 -3
  313. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  314. package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
  315. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
  316. package/dist/resolvers/PipelineProgressResolver.js +5 -3
  317. package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
  318. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  319. package/dist/resolvers/QueryResolver.js +20 -6
  320. package/dist/resolvers/QueryResolver.js.map +1 -1
  321. package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -0
  322. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  323. package/dist/resolvers/QuerySystemUserResolver.js +184 -88
  324. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  325. package/dist/resolvers/RSUResolver.d.ts.map +1 -1
  326. package/dist/resolvers/RSUResolver.js +12 -0
  327. package/dist/resolvers/RSUResolver.js.map +1 -1
  328. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  329. package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
  330. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  331. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +22 -2
  332. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  333. package/dist/resolvers/RealtimeClientSessionResolver.js +118 -33
  334. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  335. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
  336. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  337. package/dist/resolvers/RemoteBrowserActionResolver.js +224 -39
  338. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  339. package/dist/resolvers/RunAIAgentResolver.d.ts +80 -16
  340. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  341. package/dist/resolvers/RunAIAgentResolver.js +388 -125
  342. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  343. package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
  344. package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
  345. package/dist/resolvers/RunAIPromptResolver.js +19 -18
  346. package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
  347. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  348. package/dist/resolvers/RunTemplateResolver.js +7 -5
  349. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  350. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  351. package/dist/resolvers/RunTestResolver.js +3 -1
  352. package/dist/resolvers/RunTestResolver.js.map +1 -1
  353. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  354. package/dist/resolvers/SyncDataResolver.js +4 -0
  355. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  356. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  357. package/dist/resolvers/TestQuerySQLResolver.js +1 -0
  358. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  359. package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
  360. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  361. package/dist/resolvers/TransactionGroupResolver.js +60 -15
  362. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  363. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  364. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  365. package/dist/resolvers/UserViewResolver.js +2 -1
  366. package/dist/resolvers/UserViewResolver.js.map +1 -1
  367. package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
  368. package/dist/resolvers/meetingRecordingRegistration.js +2 -0
  369. package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
  370. package/dist/rest/EntityCRUDHandler.d.ts +6 -0
  371. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  372. package/dist/rest/EntityCRUDHandler.js +19 -5
  373. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  374. package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
  375. package/dist/rest/MediaAccessKeys.js +6 -2
  376. package/dist/rest/MediaAccessKeys.js.map +1 -1
  377. package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
  378. package/dist/rest/OAuthCallbackHandler.js +11 -5
  379. package/dist/rest/OAuthCallbackHandler.js.map +1 -1
  380. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  381. package/dist/rest/RESTEndpointHandler.js +8 -5
  382. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  383. package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
  384. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
  385. package/dist/rest/RealtimeRecordingHandler.js +6 -8
  386. package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
  387. package/dist/rest/ViewOperationsHandler.d.ts +6 -0
  388. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  389. package/dist/rest/ViewOperationsHandler.js +24 -6
  390. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  391. package/dist/rest/setupRESTEndpoints.d.ts +3 -1
  392. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  393. package/dist/rest/setupRESTEndpoints.js +11 -2
  394. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  395. package/dist/serverRoleConfigUnits.d.ts +29 -0
  396. package/dist/serverRoleConfigUnits.d.ts.map +1 -0
  397. package/dist/serverRoleConfigUnits.js +33 -0
  398. package/dist/serverRoleConfigUnits.js.map +1 -0
  399. package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
  400. package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
  401. package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
  402. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  403. package/dist/services/TaskGraphActionRunner.js +2 -26
  404. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  405. package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
  406. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  407. package/dist/services/TaskGraphAgentRunner.js +38 -0
  408. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  409. package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
  410. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  411. package/dist/services/TaskGraphContinuationDeliverer.js +43 -15
  412. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  413. package/dist/services/WorkQueueHostService.d.ts +2 -1
  414. package/dist/services/WorkQueueHostService.d.ts.map +1 -1
  415. package/dist/services/WorkQueueHostService.js +19 -4
  416. package/dist/services/WorkQueueHostService.js.map +1 -1
  417. package/dist/services/workQueueConfig.d.ts +2 -2
  418. package/dist/services/workQueueConfig.js +5 -5
  419. package/dist/services/workQueueConfig.js.map +1 -1
  420. package/dist/sharedCache.js +1 -1
  421. package/dist/sharedCache.js.map +1 -1
  422. package/dist/types.d.ts +40 -1
  423. package/dist/types.d.ts.map +1 -1
  424. package/dist/types.js.map +1 -1
  425. package/package.json +98 -98
  426. package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
  427. package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
  428. package/src/__tests__/ActiveOperations.test.ts +68 -0
  429. package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
  430. package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
  431. package/src/__tests__/AgentSessionResolver.ownership.test.ts +150 -0
  432. package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
  433. package/src/__tests__/BatchApplyParity.test.ts +109 -0
  434. package/src/__tests__/BridgeHostInstance.test.ts +42 -0
  435. package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
  436. package/src/__tests__/ConnectionPause.test.ts +192 -0
  437. package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
  438. package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
  439. package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
  440. package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
  441. package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
  442. package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
  443. package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
  444. package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
  445. package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
  446. package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
  447. package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
  448. package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
  449. package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
  450. package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
  451. package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
  452. package/src/__tests__/MagicLinkKeys.test.ts +102 -0
  453. package/src/__tests__/MediaAccessKeys.test.ts +57 -10
  454. package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
  455. package/src/__tests__/ObjectNamesByID.test.ts +176 -0
  456. package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
  457. package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
  458. package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
  459. package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
  460. package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
  461. package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
  462. package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
  463. package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
  464. package/src/__tests__/RSUProgressBridge.test.ts +188 -5
  465. package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
  466. package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
  467. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
  468. package/src/__tests__/RealtimeClientSessionResolver.test.ts +346 -46
  469. package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
  470. package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
  471. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
  472. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +100 -0
  473. package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
  474. package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
  475. package/src/__tests__/ResolverBase.clientOldValues.test.ts +344 -14
  476. package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
  477. package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
  478. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +227 -0
  479. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +83 -1
  480. package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
  481. package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
  482. package/src/__tests__/RunAIAgentResolver.branch.test.ts +72 -13
  483. package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
  484. package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
  485. package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
  486. package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
  487. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +19 -27
  488. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +10 -2
  489. package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
  490. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +91 -13
  491. package/src/__tests__/RunTemplateResolver.test.ts +35 -2
  492. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
  493. package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
  494. package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
  495. package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
  496. package/src/__tests__/SessionJanitor.test.ts +195 -4
  497. package/src/__tests__/SessionManager.test.ts +164 -0
  498. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
  499. package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
  500. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
  501. package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
  502. package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
  503. package/src/__tests__/ViewOperationsHandler.test.ts +9 -7
  504. package/src/__tests__/WidgetSessionService.test.ts +583 -4
  505. package/src/__tests__/WorkQueueHostService.test.ts +25 -7
  506. package/src/__tests__/apiRootBoot.test.ts +1 -1
  507. package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
  508. package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
  509. package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
  510. package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
  511. package/src/__tests__/contextRequestOrigin.test.ts +105 -0
  512. package/src/__tests__/conversationBrowsers.test.ts +62 -0
  513. package/src/__tests__/fieldSecurityFixtures.ts +91 -0
  514. package/src/__tests__/globalCors.test.ts +3 -3
  515. package/src/__tests__/localDevAuth.test.ts +196 -0
  516. package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
  517. package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
  518. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
  519. package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
  520. package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
  521. package/src/__tests__/realtimeRecordingHandler.test.ts +24 -2
  522. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
  523. package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
  524. package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
  525. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +224 -7
  526. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
  527. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
  528. package/src/__tests__/requestOrigin.test.ts +104 -0
  529. package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
  530. package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
  531. package/src/__tests__/resolverBase.fls.test.ts +146 -97
  532. package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
  533. package/src/__tests__/runParamsTimeZone.test.ts +179 -0
  534. package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
  535. package/src/__tests__/runViewProperties.test.ts +114 -0
  536. package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
  537. package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
  538. package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
  539. package/src/__tests__/sessionDeadline.test.ts +51 -0
  540. package/src/__tests__/sessionUserClone.test.ts +5 -1
  541. package/src/__tests__/sharedCache.test.ts +11 -0
  542. package/src/__tests__/startupSweepOrder.test.ts +40 -0
  543. package/src/__tests__/unifiedAuth.test.ts +101 -1
  544. package/src/__tests__/widgetGuestElevation.test.ts +2 -0
  545. package/src/agentSessions/BridgeHostInstance.ts +20 -5
  546. package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
  547. package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
  548. package/src/agentSessions/SessionJanitor.ts +95 -45
  549. package/src/agentSessions/SessionManager.ts +73 -20
  550. package/src/agentSessions/conversationBrowsers.ts +143 -0
  551. package/src/agentSessions/sessionDeadline.ts +81 -0
  552. package/src/auth/APIKeyScopeAuth.ts +5 -4
  553. package/src/auth/AuthProviderCatalogRouter.ts +3 -0
  554. package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
  555. package/src/auth/index.ts +56 -12
  556. package/src/auth/initializeProviders.ts +43 -1
  557. package/src/auth/localDevAuth.ts +528 -0
  558. package/src/auth/loginEmailResolution.ts +67 -0
  559. package/src/auth/magicLink/MagicLinkKeys.ts +147 -15
  560. package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
  561. package/src/auth/magicLink/MagicLinkService.ts +250 -10
  562. package/src/auth/magicLink/index.ts +1 -1
  563. package/src/auth/magicLink/redeemLanding.ts +7 -4
  564. package/src/auth/magicLink/types.ts +38 -3
  565. package/src/auth/newUsers.ts +1 -0
  566. package/src/auth/sessionUserClone.ts +3 -2
  567. package/src/backgroundSweepConfigUnits.ts +213 -0
  568. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
  569. package/src/broadcast/index.ts +5 -0
  570. package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
  571. package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
  572. package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
  573. package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
  574. package/src/cache.ts +2 -1
  575. package/src/config.ts +138 -0
  576. package/src/context.ts +71 -14
  577. package/src/coreRoutes.ts +29 -7
  578. package/src/generated/graphql-schemas/__mj.ts +4145 -1193
  579. package/src/generic/CacheInvalidationResolver.ts +135 -78
  580. package/src/generic/OrphanedConversationDetailReconciler.ts +36 -3
  581. package/src/generic/PubSubManager.ts +54 -1
  582. package/src/generic/PushStatusResolver.ts +108 -11
  583. package/src/generic/ResolverBase.ts +635 -234
  584. package/src/generic/RunViewResolver.ts +176 -64
  585. package/src/generic/actionOutputFieldSecurity.ts +75 -0
  586. package/src/generic/fieldSecurityTransport.ts +62 -0
  587. package/src/index.ts +310 -85
  588. package/src/integration/ConnectionPause.ts +222 -0
  589. package/src/integration/CustomColumnPromoter.ts +129 -54
  590. package/src/integration/EntityMapLifecycle.ts +229 -6
  591. package/src/integration/InactiveRowWarnings.ts +50 -0
  592. package/src/integration/ObjectNamesByID.ts +97 -0
  593. package/src/integration/PostRestartIntrospect.ts +49 -0
  594. package/src/integration/RSUPostRestartProgress.ts +359 -0
  595. package/src/integration/RSUProgressBridge.ts +85 -2
  596. package/src/integration/RunArtifactAuthorization.ts +65 -0
  597. package/src/integration/SchemaRefreshLaunch.ts +12 -2
  598. package/src/integration/ScopedFieldsForBuild.ts +113 -0
  599. package/src/integration/TargetConfigGuard.ts +71 -0
  600. package/src/logging/variablesLoggingMiddleware.ts +59 -3
  601. package/src/realtimeSessions/README.md +7 -3
  602. package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
  603. package/src/realtimeSessions/ownedRealtimeSession.ts +16 -6
  604. package/src/realtimeSessions/sessionAccess.ts +211 -25
  605. package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
  606. package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
  607. package/src/realtimeSessions/verificationWorkflow.ts +3 -1
  608. package/src/realtimeWidget/WidgetRouter.ts +22 -4
  609. package/src/realtimeWidget/WidgetSessionService.ts +254 -17
  610. package/src/realtimeWidget/host-identity.ts +1 -1
  611. package/src/realtimeWidget/visitorIdentity.ts +1 -0
  612. package/src/realtimeWidget/widgetCore.ts +34 -9
  613. package/src/realtimeWidget/widgetGuestElevation.ts +3 -1
  614. package/src/requestOrigin.ts +64 -0
  615. package/src/resolvers/ActionResolver.ts +78 -15
  616. package/src/resolvers/AdhocQueryResolver.ts +1 -0
  617. package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
  618. package/src/resolvers/AgentSessionResolver.ts +50 -18
  619. package/src/resolvers/AutotagPipelineResolver.ts +2 -1
  620. package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
  621. package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
  622. package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
  623. package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
  624. package/src/resolvers/FileCategoryResolver.ts +1 -0
  625. package/src/resolvers/FileResolver.ts +14 -4
  626. package/src/resolvers/GetDataResolver.ts +35 -13
  627. package/src/resolvers/IntegrationDiscoveryResolver.ts +1570 -209
  628. package/src/resolvers/MCPResolver.ts +15 -2
  629. package/src/resolvers/MergeRecordsResolver.ts +23 -2
  630. package/src/resolvers/PipelineProgressResolver.ts +12 -3
  631. package/src/resolvers/QueryResolver.ts +20 -6
  632. package/src/resolvers/QuerySystemUserResolver.ts +207 -99
  633. package/src/resolvers/RSUResolver.ts +12 -0
  634. package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
  635. package/src/resolvers/RealtimeClientSessionResolver.ts +144 -40
  636. package/src/resolvers/RemoteBrowserActionResolver.ts +252 -37
  637. package/src/resolvers/RunAIAgentResolver.ts +518 -163
  638. package/src/resolvers/RunAIPromptResolver.ts +18 -18
  639. package/src/resolvers/RunTemplateResolver.ts +9 -5
  640. package/src/resolvers/RunTestResolver.ts +3 -1
  641. package/src/resolvers/SyncDataResolver.ts +4 -0
  642. package/src/resolvers/TestQuerySQLResolver.ts +1 -0
  643. package/src/resolvers/TransactionGroupResolver.ts +66 -15
  644. package/src/resolvers/UserViewResolver.ts +2 -1
  645. package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
  646. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
  647. package/src/resolvers/meetingRecordingRegistration.ts +2 -0
  648. package/src/rest/EntityCRUDHandler.ts +22 -5
  649. package/src/rest/MediaAccessKeys.ts +6 -2
  650. package/src/rest/OAuthCallbackHandler.ts +13 -5
  651. package/src/rest/RESTEndpointHandler.ts +8 -5
  652. package/src/rest/RealtimeRecordingHandler.ts +9 -10
  653. package/src/rest/ViewOperationsHandler.ts +26 -7
  654. package/src/rest/setupRESTEndpoints.ts +11 -2
  655. package/src/serverRoleConfigUnits.ts +48 -0
  656. package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
  657. package/src/services/TaskGraphActionRunner.ts +2 -23
  658. package/src/services/TaskGraphAgentRunner.ts +43 -0
  659. package/src/services/TaskGraphContinuationDeliverer.ts +53 -20
  660. package/src/services/WorkQueueHostService.ts +26 -4
  661. package/src/services/workQueueConfig.ts +5 -5
  662. package/src/sharedCache.ts +1 -1
  663. package/src/types.ts +41 -1
  664. package/src/services/TaskOrchestration-Integration.md +0 -188
@@ -0,0 +1,528 @@
1
+ /**
2
+ * @fileoverview Local Development Mock/Test JWT Authentication (`local`).
3
+ *
4
+ * Provides a zero-external-IdP local development login flow backed by MJ's
5
+ * in-memory RS256 `MagicLinkKeyManager` and JWKS endpoint.
6
+ *
7
+ * HARD SECURITY INVARIANTS:
8
+ * 1. Fail loud in production: If `MJ_DEV_AUTH_ENABLED` (or `configInfo.devAuth?.enabled`)
9
+ * is enabled while `NODE_ENV === 'production'`, server startup throws a fatal error
10
+ * and refuses to boot.
11
+ * 2. Strict localhost-only guard: Every request to `/auth/dev-login` and `/auth/dev-users`
12
+ * verifies that:
13
+ * - `NODE_ENV !== 'production'` and local dev auth is enabled.
14
+ * - `X-Forwarded-For` (if present) contains only loopback addresses.
15
+ * - `Host` header is `localhost`, `127.0.0.1`, or `::1`.
16
+ * - `Origin` / `Referer` headers (if present) resolve to `localhost`, `127.0.0.1`, or `::1`.
17
+ * - Socket remote address is loopback (`127.0.0.1`, `::1`, `::ffff:127.0.0.1`) or local
18
+ * Docker bridge/host-gateway when no external `X-Forwarded-For` is present.
19
+ * Any request failing these checks is denied with `403 Forbidden` and logged.
20
+ *
21
+ * @module @memberjunction/server/auth/localDevAuth
22
+ */
23
+
24
+ import * as fs from 'node:fs';
25
+ import { Router, json, type Request, type Response } from 'express';
26
+ import { rateLimit } from 'express-rate-limit';
27
+ import {
28
+ AuthProviderConfig,
29
+ DatabaseProviderBase,
30
+ IMetadataProvider,
31
+ LogError,
32
+ LogStatusEx,
33
+ Metadata,
34
+ UserInfo,
35
+ } from '@memberjunction/core';
36
+ import { UUIDsEqual } from '@memberjunction/global';
37
+ import { AuthProviderFactory, LocalDevProvider } from '@memberjunction/auth-providers';
38
+ import { UserCache } from '@memberjunction/generic-database-provider';
39
+ import { configInfo } from '../config.js';
40
+ import { ApiRoute } from '../apiRoot.js';
41
+ import { MagicLinkKeyManager } from './magicLink/MagicLinkKeys.js';
42
+ import { MAGIC_LINK_JWKS_PATH } from './magicLink/MagicLinkRouter.js';
43
+ import { AssertLocalDevAuthAllowed, IsLocalDevAuthEnabled } from './initializeProviders.js';
44
+
45
+ export { AssertLocalDevAuthAllowed, IsLocalDevAuthEnabled };
46
+
47
+ /** Claims embedded in a local development JWT. */
48
+ interface LocalDevJWTClaims extends Record<string, unknown> {
49
+ iss: string;
50
+ aud: string;
51
+ sub: string;
52
+ email: string;
53
+ given_name: string;
54
+ family_name: string;
55
+ name: string;
56
+ preferred_username: string;
57
+ iat: number;
58
+ exp: number;
59
+ }
60
+
61
+ /** Result of the localhost-only request guard. */
62
+ export interface LocalhostGuardResult {
63
+ Allowed: boolean;
64
+ Reason?: string;
65
+ }
66
+
67
+ const LOCALHOST_HOSTNAMES = new Set(['localhost', '127.0.0.1', '::1', '[::1]']);
68
+
69
+ function TrimTrailingSlashes(value: string): string {
70
+ let end = value.length;
71
+ while (end > 0 && value.charCodeAt(end - 1) === 47) {
72
+ end--;
73
+ }
74
+ return value.slice(0, end);
75
+ }
76
+
77
+ /**
78
+ * Checks whether an IP address is a loopback address, or (when `allowDockerBridge` is true)
79
+ * a local Docker bridge / Docker Desktop host-gateway address.
80
+ */
81
+ export function IsLoopbackAddress(rawIp: string | undefined, allowDockerBridge: boolean): boolean {
82
+ if (!rawIp) {
83
+ return false;
84
+ }
85
+ const normalized = rawIp.trim().toLowerCase().replace(/^::ffff:/, '');
86
+ if (normalized === '127.0.0.1' || normalized === '::1' || normalized === 'localhost') {
87
+ return true;
88
+ }
89
+ if (/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(normalized)) {
90
+ return true;
91
+ }
92
+ if (allowDockerBridge) {
93
+ // Docker Desktop macOS/Windows host-gateway IPs (192.168.65.0/24) and local
94
+ // Docker bridge gateway (.1) addresses when a host browser connects to a
95
+ // port-forwarded container bound to 127.0.0.1 on the host.
96
+ if (/^192\.168\.65\.\d{1,3}$/.test(normalized)) {
97
+ return true;
98
+ }
99
+ if (/^172\.(1[6-9]|2\d|3[0-1])\.\d{1,3}\.1$/.test(normalized)) {
100
+ return true;
101
+ }
102
+ if (normalized === '10.0.2.2') {
103
+ return true;
104
+ }
105
+ }
106
+ return false;
107
+ }
108
+
109
+ function isRunningInsideContainer(env: NodeJS.ProcessEnv): boolean {
110
+ if (env.MJ_DEV_AUTH_ALLOW_DOCKER_BRIDGE === 'true') {
111
+ return true;
112
+ }
113
+ if (env.MJ_DEV_AUTH_ALLOW_DOCKER_BRIDGE === 'false') {
114
+ return false;
115
+ }
116
+ return fs.existsSync('/.dockerenv') || fs.existsSync('/run/.containerenv');
117
+ }
118
+
119
+ /** Extracts the hostname (without port) from a raw HTTP `Host` header value. */
120
+ function extractHostnameFromHostHeader(hostHeader: string | undefined): string {
121
+ if (!hostHeader) {
122
+ return '';
123
+ }
124
+ const trimmed = hostHeader.trim().toLowerCase();
125
+ if (trimmed.startsWith('[')) {
126
+ const closeIdx = trimmed.indexOf(']');
127
+ return closeIdx >= 0 ? trimmed.slice(1, closeIdx) : trimmed;
128
+ }
129
+ const colonIdx = trimmed.indexOf(':');
130
+ return colonIdx >= 0 ? trimmed.slice(0, colonIdx) : trimmed;
131
+ }
132
+
133
+ /** Extracts the hostname from an `Origin` or `Referer` URL header. */
134
+ function extractHostnameFromUrlHeader(urlHeader: string): string | null {
135
+ try {
136
+ const parsed = new URL(urlHeader);
137
+ return parsed.hostname.toLowerCase().replace(/^\[|\]$/g, '');
138
+ } catch {
139
+ return null;
140
+ }
141
+ }
142
+
143
+ /**
144
+ * Verifies that an incoming HTTP request to a local-dev auth endpoint originated
145
+ * strictly from localhost (`localhost`, `127.0.0.1`, or `::1`).
146
+ */
147
+ export function VerifyLocalhostRequest(
148
+ req: Request,
149
+ env: NodeJS.ProcessEnv = process.env
150
+ ): LocalhostGuardResult {
151
+ if (env.NODE_ENV?.trim().toLowerCase() === 'production') {
152
+ return {
153
+ Allowed: false,
154
+ Reason: 'Local dev auth is strictly forbidden when NODE_ENV=production.',
155
+ };
156
+ }
157
+
158
+ // 1. Inspect X-Forwarded-For / Forwarded / X-Real-IP / CF-Connecting-IP if present — every hop must be pure loopback
159
+ const xffRaw = req.headers['x-forwarded-for'];
160
+ const xffValue = Array.isArray(xffRaw) ? xffRaw.join(',') : xffRaw;
161
+ if (xffValue && xffValue.trim().length > 0) {
162
+ const hops = xffValue.split(',').map((h) => h.trim()).filter(Boolean);
163
+ for (const hop of hops) {
164
+ if (!IsLoopbackAddress(hop, false)) {
165
+ return {
166
+ Allowed: false,
167
+ Reason: `Non-loopback X-Forwarded-For address '${hop}' rejected.`,
168
+ };
169
+ }
170
+ }
171
+ }
172
+
173
+ for (const proxyHeader of ['x-real-ip', 'cf-connecting-ip'] as const) {
174
+ const rawHeader = req.headers[proxyHeader];
175
+ const headerVal = Array.isArray(rawHeader) ? rawHeader[0] : rawHeader;
176
+ if (headerVal && headerVal.trim().length > 0 && !IsLoopbackAddress(headerVal, false)) {
177
+ return {
178
+ Allowed: false,
179
+ Reason: `Non-loopback ${proxyHeader} address '${headerVal}' rejected.`,
180
+ };
181
+ }
182
+ }
183
+
184
+ const forwardedHeader = req.headers['forwarded'];
185
+ const forwardedVal = Array.isArray(forwardedHeader) ? forwardedHeader.join(',') : forwardedHeader;
186
+ if (forwardedVal && forwardedVal.trim().length > 0) {
187
+ const forMatches = forwardedVal.matchAll(/for=\s*"?\[?([^;,"\]]+)\]?"?/gi);
188
+ for (const match of forMatches) {
189
+ const candidateIp = match[1]?.split(':')[0]?.trim();
190
+ if (candidateIp && !IsLoopbackAddress(candidateIp, false)) {
191
+ return {
192
+ Allowed: false,
193
+ Reason: `Non-loopback Forwarded address '${candidateIp}' rejected.`,
194
+ };
195
+ }
196
+ }
197
+ }
198
+
199
+ // 1b. Reject browser cross-site requests via Sec-Fetch-Site
200
+ const secFetchSite = typeof req.headers['sec-fetch-site'] === 'string' ? req.headers['sec-fetch-site'].trim().toLowerCase() : undefined;
201
+ if (secFetchSite === 'cross-site') {
202
+ return {
203
+ Allowed: false,
204
+ Reason: `Cross-site request (Sec-Fetch-Site: ${secFetchSite}) rejected.`,
205
+ };
206
+ }
207
+
208
+ // 2. Inspect Host header — must be localhost, 127.0.0.1, or ::1
209
+ const hostHeader = typeof req.headers.host === 'string' ? req.headers.host : req.hostname;
210
+ const hostName = extractHostnameFromHostHeader(hostHeader);
211
+ if (!hostName || !LOCALHOST_HOSTNAMES.has(hostName)) {
212
+ return {
213
+ Allowed: false,
214
+ Reason: `Non-localhost Host header '${hostHeader ?? 'missing'}' rejected.`,
215
+ };
216
+ }
217
+
218
+ // 3. Inspect Origin header if present
219
+ const originHeader = typeof req.headers.origin === 'string' ? req.headers.origin : undefined;
220
+ if (originHeader) {
221
+ const originHost = extractHostnameFromUrlHeader(originHeader);
222
+ if (!originHost || !LOCALHOST_HOSTNAMES.has(originHost)) {
223
+ return {
224
+ Allowed: false,
225
+ Reason: `Non-localhost Origin header '${originHeader}' rejected.`,
226
+ };
227
+ }
228
+ }
229
+
230
+ // 4. Inspect Referer header if present
231
+ const refererHeader = typeof req.headers.referer === 'string' ? req.headers.referer : undefined;
232
+ if (refererHeader) {
233
+ const refererHost = extractHostnameFromUrlHeader(refererHeader);
234
+ if (!refererHost || !LOCALHOST_HOSTNAMES.has(refererHost)) {
235
+ return {
236
+ Allowed: false,
237
+ Reason: `Non-localhost Referer header '${refererHeader}' rejected.`,
238
+ };
239
+ }
240
+ }
241
+
242
+ // 5. Inspect socket remote address (allow Docker local bridge ONLY when running in a container and no proxy header is present)
243
+ const hasProxyHeader = Boolean(
244
+ (xffValue && xffValue.trim().length > 0) ||
245
+ (forwardedVal && forwardedVal.trim().length > 0) ||
246
+ req.headers['x-real-ip'] ||
247
+ req.headers['cf-connecting-ip']
248
+ );
249
+ const allowDockerBridge = !hasProxyHeader && isRunningInsideContainer(env);
250
+ const remoteAddress = req.socket?.remoteAddress || req.ip;
251
+ if (!IsLoopbackAddress(remoteAddress, allowDockerBridge)) {
252
+ return {
253
+ Allowed: false,
254
+ Reason: `Non-loopback socket remote address '${remoteAddress ?? 'unknown'}' rejected.`,
255
+ };
256
+ }
257
+
258
+ return { Allowed: true };
259
+ }
260
+
261
+ /**
262
+ * Registers the `local` auth provider in `AuthProviderFactory` and `configInfo.authProviders`
263
+ * using the server's configured public URL and the shared `MagicLinkKeyManager` JWKS endpoint.
264
+ */
265
+ export function RegisterLocalDevAuthProvider(publicUrl?: string): void {
266
+ AssertLocalDevAuthAllowed();
267
+ MagicLinkKeyManager.Instance.Initialize(configInfo.magicLink?.rsaPrivateKey);
268
+
269
+ const base = publicUrl ? TrimTrailingSlashes(publicUrl) : undefined;
270
+ const issuer = base ? `${base}/local-dev` : ApiRoute('/local-dev', { absolute: true });
271
+ const jwksUri = base ? `${base}${MAGIC_LINK_JWKS_PATH}` : ApiRoute(MAGIC_LINK_JWKS_PATH, { absolute: true });
272
+ const providerConfig: AuthProviderConfig = {
273
+ name: 'local',
274
+ type: 'local',
275
+ issuer,
276
+ audience: LocalDevProvider.DEFAULT_AUDIENCE,
277
+ jwksUri,
278
+ };
279
+
280
+ try {
281
+ const factory = AuthProviderFactory.Instance;
282
+ const existingProvider = factory.getByName('local');
283
+ if (existingProvider && existingProvider.issuer === issuer && existingProvider.jwksUri === jwksUri) {
284
+ return;
285
+ }
286
+
287
+ configInfo.authProviders = configInfo.authProviders ?? [];
288
+ const existingIdx = configInfo.authProviders.findIndex((p) => p.type === 'local' || p.name === 'local');
289
+ if (existingIdx >= 0) {
290
+ configInfo.authProviders[existingIdx] = providerConfig;
291
+ } else {
292
+ configInfo.authProviders.push(providerConfig);
293
+ }
294
+ factory.register(AuthProviderFactory.createProvider(providerConfig));
295
+ LogStatusEx({
296
+ message: `[LocalDevAuth] Registered local dev auth provider (issuer: ${providerConfig.issuer}, jwks: ${providerConfig.jwksUri})`,
297
+ verboseOnly: true,
298
+ });
299
+ } catch (e) {
300
+ LogError(`[LocalDevAuth] Failed to register local dev auth provider: ${e instanceof Error ? e.message : String(e)}`);
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Resolves the active local MJ user to sign in as for local development.
306
+ */
307
+ export async function ResolveLocalDevUser(
308
+ requestedEmail?: string,
309
+ provider?: IMetadataProvider
310
+ ): Promise<UserInfo | null> {
311
+ const effectiveProvider = provider ?? Metadata.Provider;
312
+ if ((!UserCache.Instance.Users || UserCache.Instance.Users.length === 0) && effectiveProvider) {
313
+ try {
314
+ await UserCache.Instance.Refresh(effectiveProvider as DatabaseProviderBase);
315
+ } catch (err) {
316
+ LogError(`[LocalDevAuth] Failed to refresh UserCache: ${err instanceof Error ? err.message : String(err)}`);
317
+ }
318
+ }
319
+
320
+ const allUsers = UserCache.Instance.Users ?? [];
321
+ const activeUsers = allUsers.filter(
322
+ (u) =>
323
+ u.IsActive &&
324
+ !UUIDsEqual(u.ID, UserCache.Instance.SYSTEM_USER_ID) &&
325
+ u.Name?.trim().toLowerCase() !== 'system'
326
+ );
327
+
328
+ const targetEmail =
329
+ requestedEmail?.trim() ||
330
+ process.env.MJ_DEV_AUTH_DEFAULT_EMAIL?.trim() ||
331
+ configInfo?.devAuth?.defaultEmail?.trim();
332
+ if (targetEmail) {
333
+ const matched = activeUsers.find((u) => u.Email?.trim().toLowerCase() === targetEmail.toLowerCase());
334
+ if (matched) {
335
+ return matched;
336
+ }
337
+ // If an explicit email was requested on the call and doesn't exist, return null
338
+ if (requestedEmail?.trim()) {
339
+ return null;
340
+ }
341
+ }
342
+
343
+ // 1. Default MJ installer admin email
344
+ const defaultAdmin = activeUsers.find((u) => u.Email?.trim().toLowerCase() === 'admin@memberjunction.org');
345
+ if (defaultAdmin) {
346
+ return defaultAdmin;
347
+ }
348
+
349
+ // 2. First active user holding the Developer role
350
+ const developerUser = activeUsers.find(
351
+ (u) =>
352
+ u.Email?.trim().toLowerCase() !== 'not.set@nowhere.com' &&
353
+ u.UserRoles?.some((r) => r.Role?.trim().toLowerCase() === 'developer')
354
+ );
355
+ if (developerUser) {
356
+ return developerUser;
357
+ }
358
+
359
+ // 3. First active Owner user with a real email
360
+ const ownerUser = activeUsers.find(
361
+ (u) =>
362
+ u.Email?.trim().toLowerCase() !== 'not.set@nowhere.com' &&
363
+ u.Type?.trim().toLowerCase() === 'owner'
364
+ );
365
+ if (ownerUser) {
366
+ return ownerUser;
367
+ }
368
+
369
+ return activeUsers[0] ?? null;
370
+ }
371
+
372
+ /**
373
+ * Mints a signed RS256 local-dev JWT for the given `UserInfo`.
374
+ */
375
+ export function MintLocalDevJwt(
376
+ user: UserInfo,
377
+ publicUrl?: string,
378
+ ttlSeconds = 8 * 3600
379
+ ): { token: string; expiresAt: string; claims: LocalDevJWTClaims } {
380
+ AssertLocalDevAuthAllowed();
381
+ MagicLinkKeyManager.Instance.Initialize(configInfo.magicLink?.rsaPrivateKey);
382
+
383
+ const base = publicUrl ? TrimTrailingSlashes(publicUrl) : undefined;
384
+ const issuer = base ? `${base}/local-dev` : ApiRoute('/local-dev', { absolute: true });
385
+ const nowSeconds = Math.floor(Date.now() / 1000);
386
+ const expSeconds = nowSeconds + ttlSeconds;
387
+ const firstName = user.FirstName?.trim() || 'Admin';
388
+ const lastName = user.LastName?.trim() || 'User';
389
+ const fullName =
390
+ [user.FirstName?.trim(), user.LastName?.trim()].filter(Boolean).join(' ') ||
391
+ user.Name?.trim() ||
392
+ user.Email;
393
+
394
+ const claims: LocalDevJWTClaims = {
395
+ iss: issuer,
396
+ aud: LocalDevProvider.DEFAULT_AUDIENCE,
397
+ sub: `local-dev|${user.ID}`,
398
+ email: user.Email,
399
+ given_name: firstName,
400
+ family_name: lastName,
401
+ name: fullName,
402
+ preferred_username: user.Email,
403
+ iat: nowSeconds,
404
+ exp: expSeconds,
405
+ };
406
+
407
+ const token = MagicLinkKeyManager.Instance.Sign(claims);
408
+ return {
409
+ token,
410
+ expiresAt: new Date(expSeconds * 1000).toISOString(),
411
+ claims,
412
+ };
413
+ }
414
+
415
+ /**
416
+ * Attaches `/dev-login` and `/dev-users` routes onto the `/auth` router.
417
+ *
418
+ * When local dev auth is disabled, these routes respond with `404`.
419
+ * When enabled, every request is gated by {@link VerifyLocalhostRequest}.
420
+ */
421
+ export function AttachLocalDevAuthRoutes(router: Router): void {
422
+ const devAuthLimiter = rateLimit({
423
+ windowMs: 60_000,
424
+ limit: 60,
425
+ standardHeaders: 'draft-7',
426
+ legacyHeaders: false,
427
+ });
428
+
429
+ router.post('/dev-login', devAuthLimiter, json(), async (req: Request, res: Response) => {
430
+ if (!IsLocalDevAuthEnabled()) {
431
+ res.status(404).json({
432
+ success: false,
433
+ error: 'Local dev auth is not enabled. Set MJ_DEV_AUTH_ENABLED=true in local development.',
434
+ });
435
+ return;
436
+ }
437
+
438
+ const guard = VerifyLocalhostRequest(req);
439
+ if (!guard.Allowed) {
440
+ LogError(`[SECURITY] Blocked /auth/dev-login request: ${guard.Reason}`);
441
+ res.status(403).json({
442
+ success: false,
443
+ error: 'Forbidden: /auth/dev-login is restricted to localhost only.',
444
+ });
445
+ return;
446
+ }
447
+
448
+ try {
449
+ RegisterLocalDevAuthProvider();
450
+
451
+ const body = (req.body ?? {}) as { email?: string };
452
+ const requestedEmail = typeof body.email === 'string' ? body.email.trim() : undefined;
453
+ const user = await ResolveLocalDevUser(requestedEmail);
454
+
455
+ if (!user) {
456
+ const availableEmails = (UserCache.Instance.Users ?? [])
457
+ .filter((u) => u.IsActive && !UUIDsEqual(u.ID, UserCache.Instance.SYSTEM_USER_ID))
458
+ .map((u) => u.Email);
459
+ res.status(404).json({
460
+ success: false,
461
+ error: requestedEmail
462
+ ? `No active MJ user found matching email '${requestedEmail}'.`
463
+ : 'No active non-System MJ user found in UserCache.',
464
+ availableUsers: availableEmails,
465
+ });
466
+ return;
467
+ }
468
+
469
+ const { token, expiresAt, claims } = MintLocalDevJwt(user);
470
+ res.set('Cache-Control', 'no-store');
471
+ res.status(200).json({
472
+ success: true,
473
+ token,
474
+ expiresAt,
475
+ user: {
476
+ id: user.ID,
477
+ email: user.Email,
478
+ name: claims.name,
479
+ firstName: claims.given_name,
480
+ lastName: claims.family_name,
481
+ roles: (user.UserRoles ?? []).map((r) => r.Role),
482
+ },
483
+ });
484
+ } catch (err) {
485
+ const message = err instanceof Error ? err.message : String(err);
486
+ LogError(`[LocalDevAuth] /auth/dev-login error: ${message}`);
487
+ res.status(500).json({
488
+ success: false,
489
+ error: message,
490
+ });
491
+ }
492
+ });
493
+
494
+ router.get('/dev-users', devAuthLimiter, async (req: Request, res: Response) => {
495
+ if (!IsLocalDevAuthEnabled()) {
496
+ res.status(404).json({
497
+ success: false,
498
+ error: 'Local dev auth is not enabled.',
499
+ });
500
+ return;
501
+ }
502
+
503
+ const guard = VerifyLocalhostRequest(req);
504
+ if (!guard.Allowed) {
505
+ LogError(`[SECURITY] Blocked /auth/dev-users request: ${guard.Reason}`);
506
+ res.status(403).json({
507
+ success: false,
508
+ error: 'Forbidden: /auth/dev-users is restricted to localhost only.',
509
+ });
510
+ return;
511
+ }
512
+
513
+ const users = (UserCache.Instance.Users ?? [])
514
+ .filter((u) => u.IsActive && !UUIDsEqual(u.ID, UserCache.Instance.SYSTEM_USER_ID) && u.Name?.trim().toLowerCase() !== 'system')
515
+ .map((u) => ({
516
+ id: u.ID,
517
+ email: u.Email,
518
+ name: u.Name,
519
+ firstName: u.FirstName,
520
+ lastName: u.LastName,
521
+ type: u.Type,
522
+ roles: (u.UserRoles ?? []).map((r) => r.Role),
523
+ }));
524
+
525
+ res.set('Cache-Control', 'no-store');
526
+ res.status(200).json({ success: true, users });
527
+ });
528
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Which email a verified login is matched to a User record by, and whether that differs from the
3
+ * identity the token carries.
4
+ *
5
+ * The server links a login to a User row by email alone. `USER_EMAIL_MAP` can rewrite that email
6
+ * before the lookup, which makes a login run as a different person's record. That is a legitimate
7
+ * development aid, but it is silent, so a misconfigured map on a shared machine looks exactly like
8
+ * an authentication bug. These helpers keep the token's identity next to the one actually used, so
9
+ * the session audit and the server log can say when the two differ.
10
+ */
11
+
12
+ /** The identity fields of a verified token that the lookup can use. */
13
+ export interface LoginIdentityClaims {
14
+ email?: string; // case-violation-ok-legacy-back-compat: mirrors the provider's extracted user info shape
15
+ preferredUsername?: string; // case-violation-ok-legacy-back-compat: mirrors the provider's extracted user info shape
16
+ }
17
+
18
+ /** The email the token carries and the email the User lookup will use. */
19
+ export interface LoginEmailResolution {
20
+ /** The identity from the verified token: its email claim, or its preferred username when it has none. */
21
+ TokenEmail: string | undefined;
22
+ /** The email the User record is looked up by, after any `USER_EMAIL_MAP` rewrite. */
23
+ LookupEmail: string | undefined;
24
+ /** True when `USER_EMAIL_MAP` replaced the token's email with a different one. */
25
+ Remapped: boolean;
26
+ }
27
+
28
+ /**
29
+ * Resolves the lookup email for a verified token. The map applies only to the email claim, with an
30
+ * exact (case-sensitive) key match, as it always has; a preferred username is never remapped.
31
+ *
32
+ * Named without "login"/"auth"/"verify": CodeQL treats calls with those words as authentication
33
+ * actions and reports the `if (!token)` guard above this call in GetUserPayload as a user-controlled
34
+ * bypass. This is a plain lookup, not an authentication step.
35
+ */
36
+ export function ResolveUserLookupEmail(claims: LoginIdentityClaims, emailMap: Record<string, string> | undefined): LoginEmailResolution {
37
+ if (!claims.email) {
38
+ return { TokenEmail: claims.preferredUsername, LookupEmail: claims.preferredUsername, Remapped: false };
39
+ }
40
+ const mapped = emailMap?.[claims.email];
41
+ const lookupEmail = mapped ?? claims.email;
42
+ return { TokenEmail: claims.email, LookupEmail: lookupEmail, Remapped: mapped !== undefined && !EmailsMatch(mapped, claims.email) };
43
+ }
44
+
45
+ /** Case-insensitive, whitespace-trimmed comparison, matching how the User lookup compares emails. */
46
+ export function EmailsMatch(a: string | undefined, b: string | undefined): boolean {
47
+ if (!a || !b) {
48
+ return false;
49
+ }
50
+ return a.trim().toLowerCase() === b.trim().toLowerCase();
51
+ }
52
+
53
+ /**
54
+ * The startup warning for a configured `USER_EMAIL_MAP`, or null when the map is absent or rewrites
55
+ * nothing. Lists every entry so whoever starts the server can see whose record each login will use.
56
+ */
57
+ export function DescribeUserEmailMap(emailMap: Record<string, string> | undefined): string | null {
58
+ const entries = Object.entries(emailMap ?? {}).filter(([from, to]) => !EmailsMatch(from, to));
59
+ if (entries.length === 0) {
60
+ return null;
61
+ }
62
+ const lines = entries.map(([from, to]) => ` ${from} -> ${to}`).join('\n');
63
+ return (
64
+ `[Auth] USER_EMAIL_MAP is set: ${entries.length} login email(s) will be matched to a different user's record. ` +
65
+ `A login with the first address runs as the user with the second. Remove the setting unless this is intended.\n${lines}`
66
+ );
67
+ }