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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +27 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/SessionJanitor.d.ts +3 -3
  4. package/dist/agentSessions/SessionJanitor.js +3 -3
  5. package/dist/agentSessions/SessionManager.d.ts +15 -5
  6. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  7. package/dist/agentSessions/SessionManager.js +34 -12
  8. package/dist/agentSessions/SessionManager.js.map +1 -1
  9. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  10. package/dist/auth/AuthProviderCatalogRouter.js +2 -0
  11. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +51 -10
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/auth/initializeProviders.d.ts +10 -0
  16. package/dist/auth/initializeProviders.d.ts.map +1 -1
  17. package/dist/auth/initializeProviders.js +37 -1
  18. package/dist/auth/initializeProviders.js.map +1 -1
  19. package/dist/auth/localDevAuth.d.ts +79 -0
  20. package/dist/auth/localDevAuth.d.ts.map +1 -0
  21. package/dist/auth/localDevAuth.js +439 -0
  22. package/dist/auth/localDevAuth.js.map +1 -0
  23. package/dist/auth/magicLink/MagicLinkKeys.d.ts +2 -2
  24. package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
  25. package/dist/auth/magicLink/MagicLinkKeys.js +1 -1
  26. package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
  27. package/dist/auth/magicLink/types.d.ts +12 -0
  28. package/dist/auth/magicLink/types.d.ts.map +1 -1
  29. package/dist/auth/sessionUserClone.d.ts +1 -1
  30. package/dist/auth/sessionUserClone.d.ts.map +1 -1
  31. package/dist/auth/sessionUserClone.js +3 -2
  32. package/dist/auth/sessionUserClone.js.map +1 -1
  33. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts +292 -0
  34. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -0
  35. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +442 -0
  36. package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -0
  37. package/dist/broadcast/index.d.ts +6 -0
  38. package/dist/broadcast/index.d.ts.map +1 -0
  39. package/dist/broadcast/index.js +6 -0
  40. package/dist/broadcast/index.js.map +1 -0
  41. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts +43 -0
  42. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.d.ts.map +1 -0
  43. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js +144 -0
  44. package/dist/broadcast/providers/AWSIoTCoreBroadcastProvider.js.map +1 -0
  45. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts +46 -0
  46. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.d.ts.map +1 -0
  47. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js +149 -0
  48. package/dist/broadcast/providers/AzureWebPubSubBroadcastProvider.js.map +1 -0
  49. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts +49 -0
  50. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.d.ts.map +1 -0
  51. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js +131 -0
  52. package/dist/broadcast/providers/GCPPubSubBroadcastProvider.js.map +1 -0
  53. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts +24 -0
  54. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.d.ts.map +1 -0
  55. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js +51 -0
  56. package/dist/broadcast/providers/SequencedRoleBucketBroadcastProvider.js.map +1 -0
  57. package/dist/cache.d.ts +3 -2
  58. package/dist/cache.d.ts.map +1 -1
  59. package/dist/cache.js.map +1 -1
  60. package/dist/config.d.ts +496 -0
  61. package/dist/config.d.ts.map +1 -1
  62. package/dist/config.js +61 -0
  63. package/dist/config.js.map +1 -1
  64. package/dist/context.d.ts +3 -1
  65. package/dist/context.d.ts.map +1 -1
  66. package/dist/context.js +29 -8
  67. package/dist/context.js.map +1 -1
  68. package/dist/coreRoutes.d.ts.map +1 -1
  69. package/dist/coreRoutes.js +14 -0
  70. package/dist/coreRoutes.js.map +1 -1
  71. package/dist/generated/graphql-schemas/__mj.d.ts +635 -14
  72. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  73. package/dist/generated/graphql-schemas/__mj.js +3366 -418
  74. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  75. package/dist/generic/CacheInvalidationResolver.d.ts +50 -30
  76. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  77. package/dist/generic/CacheInvalidationResolver.js +154 -79
  78. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  79. package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
  80. package/dist/generic/OrphanedConversationDetailReconciler.js +2 -0
  81. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  82. package/dist/generic/PubSubManager.d.ts +10 -0
  83. package/dist/generic/PubSubManager.d.ts.map +1 -1
  84. package/dist/generic/PubSubManager.js +44 -1
  85. package/dist/generic/PubSubManager.js.map +1 -1
  86. package/dist/generic/PushStatusResolver.d.ts +39 -6
  87. package/dist/generic/PushStatusResolver.d.ts.map +1 -1
  88. package/dist/generic/PushStatusResolver.js +93 -11
  89. package/dist/generic/PushStatusResolver.js.map +1 -1
  90. package/dist/generic/ResolverBase.d.ts +65 -25
  91. package/dist/generic/ResolverBase.d.ts.map +1 -1
  92. package/dist/generic/ResolverBase.js +201 -101
  93. package/dist/generic/ResolverBase.js.map +1 -1
  94. package/dist/generic/RunViewResolver.d.ts +11 -3
  95. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  96. package/dist/generic/RunViewResolver.js +79 -13
  97. package/dist/generic/RunViewResolver.js.map +1 -1
  98. package/dist/generic/actionOutputFieldSecurity.d.ts +26 -0
  99. package/dist/generic/actionOutputFieldSecurity.d.ts.map +1 -0
  100. package/dist/generic/actionOutputFieldSecurity.js +47 -0
  101. package/dist/generic/actionOutputFieldSecurity.js.map +1 -0
  102. package/dist/generic/fieldSecurityTransport.d.ts +30 -0
  103. package/dist/generic/fieldSecurityTransport.d.ts.map +1 -0
  104. package/dist/generic/fieldSecurityTransport.js +30 -0
  105. package/dist/generic/fieldSecurityTransport.js.map +1 -0
  106. package/dist/index.d.ts +3 -0
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +122 -66
  109. package/dist/index.js.map +1 -1
  110. package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
  111. package/dist/integration/CustomColumnPromoter.js +6 -1
  112. package/dist/integration/CustomColumnPromoter.js.map +1 -1
  113. package/dist/logging/variablesLoggingMiddleware.d.ts +12 -0
  114. package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
  115. package/dist/logging/variablesLoggingMiddleware.js +50 -1
  116. package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
  117. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -1
  118. package/dist/realtimeSessions/SessionVerificationPortsBase.js +1 -0
  119. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -1
  120. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +8 -6
  121. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
  122. package/dist/realtimeSessions/ownedRealtimeSession.js +15 -6
  123. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
  124. package/dist/realtimeSessions/sessionAccess.d.ts +88 -11
  125. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
  126. package/dist/realtimeSessions/sessionAccess.js +125 -22
  127. package/dist/realtimeSessions/sessionAccess.js.map +1 -1
  128. package/dist/realtimeSessions/sessionConfigStamps.js +1 -1
  129. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -1
  130. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -1
  131. package/dist/realtimeSessions/subscriptionAuthorization.js +5 -2
  132. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -1
  133. package/dist/realtimeSessions/verificationWorkflow.d.ts +2 -0
  134. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -1
  135. package/dist/realtimeSessions/verificationWorkflow.js +1 -1
  136. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -1
  137. package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
  138. package/dist/realtimeWidget/WidgetRouter.js +19 -3
  139. package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
  140. package/dist/realtimeWidget/WidgetSessionService.d.ts +67 -7
  141. package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
  142. package/dist/realtimeWidget/WidgetSessionService.js +201 -19
  143. package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
  144. package/dist/realtimeWidget/host-identity.d.ts +1 -1
  145. package/dist/realtimeWidget/host-identity.js +1 -1
  146. package/dist/realtimeWidget/widgetCore.d.ts +20 -1
  147. package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
  148. package/dist/realtimeWidget/widgetCore.js +17 -1
  149. package/dist/realtimeWidget/widgetCore.js.map +1 -1
  150. package/dist/realtimeWidget/widgetGuestElevation.d.ts +1 -1
  151. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  152. package/dist/realtimeWidget/widgetGuestElevation.js +2 -1
  153. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  154. package/dist/resolvers/ActionResolver.d.ts +19 -1
  155. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  156. package/dist/resolvers/ActionResolver.js +63 -12
  157. package/dist/resolvers/ActionResolver.js.map +1 -1
  158. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  159. package/dist/resolvers/AdhocQueryResolver.js +1 -0
  160. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  161. package/dist/resolvers/AgentRunStatusPublisher.d.ts +18 -4
  162. package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
  163. package/dist/resolvers/AgentRunStatusPublisher.js +32 -8
  164. package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
  165. package/dist/resolvers/AgentSessionResolver.d.ts +10 -4
  166. package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
  167. package/dist/resolvers/AgentSessionResolver.js +40 -17
  168. package/dist/resolvers/AgentSessionResolver.js.map +1 -1
  169. package/dist/resolvers/EntityCommunicationsResolver.d.ts +13 -1
  170. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -1
  171. package/dist/resolvers/EntityCommunicationsResolver.js +50 -14
  172. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -1
  173. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +28 -0
  174. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  175. package/dist/resolvers/FetchEntityVectorsResolver.js +117 -21
  176. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  177. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -1
  178. package/dist/resolvers/FileCategoryResolver.js +1 -0
  179. package/dist/resolvers/FileCategoryResolver.js.map +1 -1
  180. package/dist/resolvers/FileResolver.d.ts +5 -0
  181. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  182. package/dist/resolvers/FileResolver.js +13 -4
  183. package/dist/resolvers/FileResolver.js.map +1 -1
  184. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  185. package/dist/resolvers/IntegrationDiscoveryResolver.js +45 -7
  186. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  187. package/dist/resolvers/MergeRecordsResolver.d.ts +8 -1
  188. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
  189. package/dist/resolvers/MergeRecordsResolver.js +31 -3
  190. package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
  191. package/dist/resolvers/PipelineProgressResolver.d.ts +6 -0
  192. package/dist/resolvers/PipelineProgressResolver.d.ts.map +1 -1
  193. package/dist/resolvers/PipelineProgressResolver.js +5 -3
  194. package/dist/resolvers/PipelineProgressResolver.js.map +1 -1
  195. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  196. package/dist/resolvers/QueryResolver.js +20 -6
  197. package/dist/resolvers/QueryResolver.js.map +1 -1
  198. package/dist/resolvers/QuerySystemUserResolver.d.ts +2 -0
  199. package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
  200. package/dist/resolvers/QuerySystemUserResolver.js +15 -6
  201. package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
  202. package/dist/resolvers/RSUResolver.d.ts.map +1 -1
  203. package/dist/resolvers/RSUResolver.js +12 -0
  204. package/dist/resolvers/RSUResolver.js.map +1 -1
  205. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +16 -2
  206. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  207. package/dist/resolvers/RealtimeClientSessionResolver.js +82 -28
  208. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  209. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  210. package/dist/resolvers/RemoteBrowserActionResolver.js +11 -9
  211. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  212. package/dist/resolvers/RunAIAgentResolver.d.ts +56 -8
  213. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  214. package/dist/resolvers/RunAIAgentResolver.js +209 -64
  215. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  216. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  217. package/dist/resolvers/RunTemplateResolver.js +4 -4
  218. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  219. package/dist/resolvers/RunTestResolver.d.ts.map +1 -1
  220. package/dist/resolvers/RunTestResolver.js +3 -1
  221. package/dist/resolvers/RunTestResolver.js.map +1 -1
  222. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  223. package/dist/resolvers/SyncDataResolver.js +4 -0
  224. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  225. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  226. package/dist/resolvers/TestQuerySQLResolver.js +1 -0
  227. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  228. package/dist/resolvers/TransactionGroupResolver.d.ts +17 -2
  229. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  230. package/dist/resolvers/TransactionGroupResolver.js +60 -15
  231. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  232. package/dist/resolvers/UserViewResolver.d.ts +1 -1
  233. package/dist/resolvers/UserViewResolver.d.ts.map +1 -1
  234. package/dist/resolvers/UserViewResolver.js +2 -1
  235. package/dist/resolvers/UserViewResolver.js.map +1 -1
  236. package/dist/rest/EntityCRUDHandler.d.ts +6 -0
  237. package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
  238. package/dist/rest/EntityCRUDHandler.js +19 -5
  239. package/dist/rest/EntityCRUDHandler.js.map +1 -1
  240. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  241. package/dist/rest/RESTEndpointHandler.js +8 -5
  242. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  243. package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
  244. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
  245. package/dist/rest/RealtimeRecordingHandler.js +7 -7
  246. package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
  247. package/dist/rest/ViewOperationsHandler.d.ts +6 -0
  248. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  249. package/dist/rest/ViewOperationsHandler.js +22 -5
  250. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  251. package/dist/serverRoleConfigUnits.d.ts +29 -0
  252. package/dist/serverRoleConfigUnits.d.ts.map +1 -0
  253. package/dist/serverRoleConfigUnits.js +33 -0
  254. package/dist/serverRoleConfigUnits.js.map +1 -0
  255. package/dist/services/TaskGraphContinuationDeliverer.d.ts +5 -0
  256. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  257. package/dist/services/TaskGraphContinuationDeliverer.js +42 -15
  258. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  259. package/dist/types.d.ts +23 -1
  260. package/dist/types.d.ts.map +1 -1
  261. package/dist/types.js.map +1 -1
  262. package/package.json +98 -98
  263. package/src/__tests__/ActionResolver.fieldSecurity.test.ts +237 -0
  264. package/src/__tests__/AdhocQueryResolver.dialect.test.ts +137 -0
  265. package/src/__tests__/AgentRunStatusPublisher.test.ts +49 -0
  266. package/src/__tests__/AgentSessionResolver.ownership.test.ts +137 -0
  267. package/src/__tests__/CustomColumnPromoterOnePass.test.ts +15 -1
  268. package/src/__tests__/EntityCommunicationsResolver.actingUser.test.ts +151 -0
  269. package/src/__tests__/EvolutionActsOnWhatItDetects.test.ts +113 -0
  270. package/src/__tests__/FetchEntityVectorsResolver.test.ts +206 -3
  271. package/src/__tests__/FileResolver.fieldSecurity.test.ts +82 -0
  272. package/src/__tests__/PipelineProgressResolver.filter.test.ts +58 -0
  273. package/src/__tests__/QuerySystemUserResolver.fieldSecurity.test.ts +49 -0
  274. package/src/__tests__/RESTEndpointHandler.test.ts +25 -0
  275. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +23 -3
  276. package/src/__tests__/RealtimeClientSessionResolver.test.ts +324 -46
  277. package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +98 -0
  278. package/src/__tests__/ResolverBase.clientOldValues.test.ts +37 -4
  279. package/src/__tests__/ResolverBase.deleteReturnProjection.test.ts +52 -0
  280. package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +176 -0
  281. package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +23 -1
  282. package/src/__tests__/ResolverBase.publishStatusUpdate.test.ts +68 -0
  283. package/src/__tests__/ResolverBase.userViewCacheAndDedup.test.ts +130 -0
  284. package/src/__tests__/RunAIAgentResolver.branch.test.ts +68 -13
  285. package/src/__tests__/RunAIAgentResolver.conversationWriter.test.ts +210 -0
  286. package/src/__tests__/RunAIAgentResolver.fireAndForgetCompletion.test.ts +209 -0
  287. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +17 -27
  288. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +8 -2
  289. package/src/__tests__/RunAIAgentResolver.serverReply.test.ts +358 -0
  290. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +4 -1
  291. package/src/__tests__/RunTemplateResolver.test.ts +35 -2
  292. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +11 -0
  293. package/src/__tests__/SessionManager.test.ts +95 -0
  294. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +114 -3
  295. package/src/__tests__/TransactionGroupResolver.fieldSecurity.test.ts +199 -0
  296. package/src/__tests__/UserViewResolver.updateWhereClause.test.ts +15 -0
  297. package/src/__tests__/ViewOperationsHandler.test.ts +7 -2
  298. package/src/__tests__/WidgetSessionService.test.ts +583 -4
  299. package/src/__tests__/apiRootBoot.test.ts +1 -1
  300. package/src/__tests__/buildMagicLinkSessionUser.test.ts +96 -0
  301. package/src/__tests__/cacheBroadcastProviders.test.ts +403 -0
  302. package/src/__tests__/cacheInvalidationRecordData.test.ts +45 -0
  303. package/src/__tests__/fieldSecurityFixtures.ts +91 -0
  304. package/src/__tests__/globalCors.test.ts +3 -3
  305. package/src/__tests__/localDevAuth.test.ts +196 -0
  306. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +10 -0
  307. package/src/__tests__/pushStatusResolver.filter.test.ts +57 -1
  308. package/src/__tests__/realtimeRecordingHandler.test.ts +19 -2
  309. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +29 -1
  310. package/src/__tests__/realtimeSessions/ownedRealtimeSession.anonymous.test.ts +31 -0
  311. package/src/__tests__/realtimeSessions/ownedRealtimeSession.namedScoped.test.ts +37 -0
  312. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +146 -7
  313. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +1 -1
  314. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +25 -4
  315. package/src/__tests__/resolverBase.cloudEventChangedFields.test.ts +157 -0
  316. package/src/__tests__/resolverBase.fieldSecurityTransport.test.ts +222 -0
  317. package/src/__tests__/resolverBase.fls.test.ts +146 -97
  318. package/src/__tests__/restTransport.fieldSecurity.test.ts +148 -0
  319. package/src/__tests__/runParamsTimeZone.test.ts +179 -0
  320. package/src/__tests__/runStreams.fieldSecurity.test.ts +100 -0
  321. package/src/__tests__/runViewProperties.test.ts +114 -0
  322. package/src/__tests__/scalabilityBenchmarks.test.ts +765 -0
  323. package/src/__tests__/scalabilityDatabaseIntegration.test.ts +207 -0
  324. package/src/__tests__/sessionUserClone.test.ts +5 -1
  325. package/src/__tests__/startupSweepOrder.test.ts +40 -0
  326. package/src/__tests__/unifiedAuth.test.ts +28 -0
  327. package/src/__tests__/widgetGuestElevation.test.ts +2 -0
  328. package/src/agentSessions/SessionJanitor.ts +3 -3
  329. package/src/agentSessions/SessionManager.ts +35 -12
  330. package/src/auth/AuthProviderCatalogRouter.ts +3 -0
  331. package/src/auth/index.ts +56 -12
  332. package/src/auth/initializeProviders.ts +43 -1
  333. package/src/auth/localDevAuth.ts +528 -0
  334. package/src/auth/magicLink/MagicLinkKeys.ts +2 -2
  335. package/src/auth/magicLink/types.ts +10 -0
  336. package/src/auth/sessionUserClone.ts +3 -2
  337. package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +674 -0
  338. package/src/broadcast/index.ts +5 -0
  339. package/src/broadcast/providers/AWSIoTCoreBroadcastProvider.ts +180 -0
  340. package/src/broadcast/providers/AzureWebPubSubBroadcastProvider.ts +182 -0
  341. package/src/broadcast/providers/GCPPubSubBroadcastProvider.ts +169 -0
  342. package/src/broadcast/providers/SequencedRoleBucketBroadcastProvider.ts +57 -0
  343. package/src/cache.ts +2 -1
  344. package/src/config.ts +69 -0
  345. package/src/context.ts +32 -8
  346. package/src/coreRoutes.ts +15 -0
  347. package/src/generated/graphql-schemas/__mj.ts +2239 -102
  348. package/src/generic/CacheInvalidationResolver.ts +135 -78
  349. package/src/generic/OrphanedConversationDetailReconciler.ts +4 -2
  350. package/src/generic/PubSubManager.ts +54 -1
  351. package/src/generic/PushStatusResolver.ts +108 -11
  352. package/src/generic/ResolverBase.ts +237 -107
  353. package/src/generic/RunViewResolver.ts +80 -15
  354. package/src/generic/actionOutputFieldSecurity.ts +75 -0
  355. package/src/generic/fieldSecurityTransport.ts +62 -0
  356. package/src/index.ts +127 -68
  357. package/src/integration/CustomColumnPromoter.ts +6 -1
  358. package/src/logging/variablesLoggingMiddleware.ts +59 -3
  359. package/src/realtimeSessions/README.md +7 -3
  360. package/src/realtimeSessions/SessionVerificationPortsBase.ts +1 -0
  361. package/src/realtimeSessions/ownedRealtimeSession.ts +20 -6
  362. package/src/realtimeSessions/sessionAccess.ts +181 -25
  363. package/src/realtimeSessions/sessionConfigStamps.ts +1 -1
  364. package/src/realtimeSessions/subscriptionAuthorization.ts +4 -2
  365. package/src/realtimeSessions/verificationWorkflow.ts +3 -1
  366. package/src/realtimeWidget/WidgetRouter.ts +22 -4
  367. package/src/realtimeWidget/WidgetSessionService.ts +252 -17
  368. package/src/realtimeWidget/host-identity.ts +1 -1
  369. package/src/realtimeWidget/widgetCore.ts +30 -1
  370. package/src/realtimeWidget/widgetGuestElevation.ts +2 -1
  371. package/src/resolvers/ActionResolver.ts +78 -15
  372. package/src/resolvers/AdhocQueryResolver.ts +1 -0
  373. package/src/resolvers/AgentRunStatusPublisher.ts +36 -8
  374. package/src/resolvers/AgentSessionResolver.ts +46 -18
  375. package/src/resolvers/EntityCommunicationsResolver.ts +56 -15
  376. package/src/resolvers/FetchEntityVectorsResolver.ts +132 -21
  377. package/src/resolvers/FileCategoryResolver.ts +1 -0
  378. package/src/resolvers/FileResolver.ts +14 -4
  379. package/src/resolvers/IntegrationDiscoveryResolver.ts +49 -7
  380. package/src/resolvers/MergeRecordsResolver.ts +23 -2
  381. package/src/resolvers/PipelineProgressResolver.ts +12 -3
  382. package/src/resolvers/QueryResolver.ts +20 -6
  383. package/src/resolvers/QuerySystemUserResolver.ts +15 -6
  384. package/src/resolvers/RSUResolver.ts +12 -0
  385. package/src/resolvers/RealtimeClientSessionResolver.ts +104 -33
  386. package/src/resolvers/RemoteBrowserActionResolver.ts +15 -10
  387. package/src/resolvers/RunAIAgentResolver.ts +258 -82
  388. package/src/resolvers/RunTemplateResolver.ts +6 -4
  389. package/src/resolvers/RunTestResolver.ts +3 -1
  390. package/src/resolvers/SyncDataResolver.ts +4 -0
  391. package/src/resolvers/TestQuerySQLResolver.ts +1 -0
  392. package/src/resolvers/TransactionGroupResolver.ts +66 -15
  393. package/src/resolvers/UserViewResolver.ts +2 -1
  394. package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +43 -0
  395. package/src/rest/EntityCRUDHandler.ts +22 -5
  396. package/src/rest/RESTEndpointHandler.ts +8 -5
  397. package/src/rest/RealtimeRecordingHandler.ts +13 -10
  398. package/src/rest/ViewOperationsHandler.ts +24 -6
  399. package/src/serverRoleConfigUnits.ts +48 -0
  400. package/src/services/TaskGraphContinuationDeliverer.ts +52 -20
  401. package/src/types.ts +23 -1
@@ -1 +1 @@
1
- {"version":3,"file":"variablesLoggingMiddleware.js","sourceRoot":"","sources":["../../src/logging/variablesLoggingMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;GAMG;AACH,IAAI,iBAAsC,CAAC;AAC3C,SAAS,eAAe;IACtB,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,iBAAiB,GAAG,aAAa,CAAC,sBAAsB,EAAE,KAAK,OAAO,CAAC;IACzE,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AA+BD,IAAI,cAAsD,CAAC;AAE3D,SAAS,iBAAiB;IACxB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,EAKjC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,MAAM,OAAO,GAAG,CAAC,OAA2C,EAAQ,EAAE;QACpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE;gBAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/B,cAAc,GAAG,MAAM,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,OAAO,GAAG,kBAAkB,EAA0E,CAAC;IAC7G,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAClE,OAAO,KAAK,EAAE,MAAM,CAAC;AACvB,CAAC;AAED,4CAA4C;AAC5C,SAAS,UAAU,CAAC,CAAmB;IACrC,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAU,CAAC;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA6B,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;IACzF,yGAAyG;IACzG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACrD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,SAAS,GAAuC,CAAC,aAAa,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEvG,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,IAAsC,EAAE,CAAC;QACrE,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,SAAS,IAAI,aAAa;YAC/C,CAAC,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;YACpF,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,UAAU,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC;QAEhF,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YACpC,aAAa;YACb,QAAQ;YACR,QAAQ;YACR,cAAc;YACd,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;YACzE,uBAAuB,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CACT,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EACxD,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAClC,CAAC;IACJ,CAAC;IAED,IAAI,uBAAuB,IAAI,aAAa,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;QAC7E,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CACV,uBAAuB,SAAS,qDAAqD;gBACrF,0FAA0F;gBAC1F,uDAAuD,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAA6B,0BAA0B,CAAC;AAE/F;;;;GAIG;AACH,SAAS,WAAW,CAClB,aAAqB,EACrB,WAAgC,EAChC,QAA4D;IAE5D,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"variablesLoggingMiddleware.js","sourceRoot":"","sources":["../../src/logging/variablesLoggingMiddleware.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionVerificationPortsBase.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/SessionVerificationPortsBase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAA8C,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGjG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAGjF,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,qGAAqG;AACrG,eAAO,MAAM,qCAAqC,+BAA+B,CAAC;AAsBlF;;;GAGG;AACH,8BAAsB,4BAA6B,YAAW,iBAAiB;IAC3E,yBAAyB;aACT,WAAW,IAAI,oBAAoB;IAEnD,wEAAwE;aACxD,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErG,oGAAoG;IACpG,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,GAAG,IAAI;IAEjD,GAAG,IAAI,MAAM;IAIP,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAShG,mBAAmB,CAAC,CAAC,EAC9B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IA8B5B,eAAe,CAClB,OAAO,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EACjF,OAAO,EAAE,4BAA4B,GACtC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAIjC,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCrE,gEAAgE;IAChE,OAAO,CAAC,SAAS;IAQjB,sFAAsF;IACtF,OAAO,CAAC,SAAS;CAOpB"}
1
+ {"version":3,"file":"SessionVerificationPortsBase.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/SessionVerificationPortsBase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAA8C,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGjG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAGjF,OAAO,EACH,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,qGAAqG;AACrG,eAAO,MAAM,qCAAqC,+BAA+B,CAAC;AAuBlF;;;GAGG;AACH,8BAAsB,4BAA6B,YAAW,iBAAiB;IAC3E,yBAAyB;aACT,WAAW,IAAI,oBAAoB;IAEnD,wEAAwE;aACxD,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErG,oGAAoG;IACpG,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,GAAG,IAAI;IAEjD,GAAG,IAAI,MAAM;IAIP,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAShG,mBAAmB,CAAC,CAAC,EAC9B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IA8B5B,eAAe,CAClB,OAAO,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EACjF,OAAO,EAAE,4BAA4B,GACtC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAIjC,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCrE,gEAAgE;IAChE,OAAO,CAAC,SAAS;IAQjB,sFAAsF;IACtF,OAAO,CAAC,SAAS;CAOpB"}
@@ -37,6 +37,7 @@ function toSnapshot(loaded) {
37
37
  AgentSessionID: Session.ID,
38
38
  OwnerUserID: Session.UserID,
39
39
  ConversationExternalID: loaded.ConversationExternalID,
40
+ ConversationReadable: loaded.ConversationReadable,
40
41
  Status: Session.Status,
41
42
  ConfigRaw: Session.Config_,
42
43
  // `__mj_CreatedAt` is the row's creation instant — i.e. the session start. It is read-only and
@@ -1 +1 @@
1
- {"version":3,"file":"SessionVerificationPortsBase.js","sourceRoot":"","sources":["../../src/realtimeSessions/SessionVerificationPortsBase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionVerificationPortsBase.js","sourceRoot":"","sources":["../../src/realtimeSessions/SessionVerificationPortsBase.ts"],"names":[],"mappings":"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"}
@@ -12,19 +12,21 @@ export declare class RealtimeSessionNotFoundError extends Error {
12
12
  readonly AgentSessionID: string;
13
13
  constructor(AgentSessionID: string);
14
14
  }
15
- /** The session exists but belongs to another user. */
15
+ /** The session exists but the caller may not use it: another user owns it, or (for a scoped or anonymous caller) its conversation carries another scope identity. */
16
16
  export declare class RealtimeSessionOwnershipError extends Error {
17
17
  readonly AgentSessionID: string;
18
18
  constructor(AgentSessionID: string);
19
19
  }
20
20
  /**
21
- * Loads a session under the caller's identity and enforces ownership (`UserID === contextUser.ID`). It
22
- * deliberately does NOT reject `Closed` sessions: the final channel-state flush and the recording terminal
23
- * signal legitimately arrive after the session closed. A scoped-anonymous widget guest owns the session it
24
- * minted, so the same check covers it; loading as the caller also applies the entity's row-level security.
21
+ * Loads a session under the caller's identity and enforces ownership: `UserID === contextUser.ID`, then the
22
+ * scope rule of {@link AuthorizeSessionAccess} (every anonymous visitor shares one Anonymous user, so the
23
+ * session's conversation `ExternalID` must equal the caller's scope identity). It deliberately does NOT
24
+ * reject `Closed` sessions: the final channel-state flush and the recording terminal signal legitimately
25
+ * arrive after the session closed. Loading as the caller also applies the entity's row-level security.
25
26
  *
26
27
  * @throws RealtimeSessionNotFoundError when the row does not load
27
- * @throws RealtimeSessionOwnershipError when the caller is not the owner (logged with both user ids)
28
+ * @throws RealtimeSessionOwnershipError when another user owns the session (logged with both user ids) or
29
+ * the scope rule refuses the caller (logged with the refusal reason)
28
30
  */
29
31
  export declare function LoadOwnedRealtimeSession(agentSessionId: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<MJAIAgentSessionEntity>;
30
32
  //# sourceMappingURL=ownedRealtimeSession.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ownedRealtimeSession.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/ownedRealtimeSession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAI5E,gEAAgE;AAChE,qBAAa,4BAA6B,SAAQ,KAAK;aACvB,cAAc,EAAE,MAAM;gBAAtB,cAAc,EAAE,MAAM;CAIrD;AAED,sDAAsD;AACtD,qBAAa,6BAA8B,SAAQ,KAAK;aACxB,cAAc,EAAE,MAAM;gBAAtB,cAAc,EAAE,MAAM;CAIrD;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC1C,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAYjC"}
1
+ {"version":3,"file":"ownedRealtimeSession.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/ownedRealtimeSession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAK5E,gEAAgE;AAChE,qBAAa,4BAA6B,SAAQ,KAAK;aACvB,cAAc,EAAE,MAAM;gBAAtB,cAAc,EAAE,MAAM;CAIrD;AAED,qKAAqK;AACrK,qBAAa,6BAA8B,SAAQ,KAAK;aACxB,cAAc,EAAE,MAAM;gBAAtB,cAAc,EAAE,MAAM;CAIrD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC1C,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAuBjC"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  import { LogError } from '@memberjunction/core';
9
9
  import { UUIDsEqual } from '@memberjunction/global';
10
+ import { AuthorizeSessionAccess, LoadSessionConversationScope } from './sessionAccess.js';
10
11
  const SESSION_ENTITY = 'MJ: AI Agent Sessions';
11
12
  /** The session does not exist, or the caller cannot read it. */
12
13
  export class RealtimeSessionNotFoundError extends Error {
@@ -16,7 +17,7 @@ export class RealtimeSessionNotFoundError extends Error {
16
17
  this.name = 'RealtimeSessionNotFoundError';
17
18
  }
18
19
  }
19
- /** The session exists but belongs to another user. */
20
+ /** The session exists but the caller may not use it: another user owns it, or (for a scoped or anonymous caller) its conversation carries another scope identity. */
20
21
  export class RealtimeSessionOwnershipError extends Error {
21
22
  constructor(AgentSessionID) {
22
23
  super('Not authorized: you do not own this realtime session');
@@ -25,13 +26,15 @@ export class RealtimeSessionOwnershipError extends Error {
25
26
  }
26
27
  }
27
28
  /**
28
- * Loads a session under the caller's identity and enforces ownership (`UserID === contextUser.ID`). It
29
- * deliberately does NOT reject `Closed` sessions: the final channel-state flush and the recording terminal
30
- * signal legitimately arrive after the session closed. A scoped-anonymous widget guest owns the session it
31
- * minted, so the same check covers it; loading as the caller also applies the entity's row-level security.
29
+ * Loads a session under the caller's identity and enforces ownership: `UserID === contextUser.ID`, then the
30
+ * scope rule of {@link AuthorizeSessionAccess} (every anonymous visitor shares one Anonymous user, so the
31
+ * session's conversation `ExternalID` must equal the caller's scope identity). It deliberately does NOT
32
+ * reject `Closed` sessions: the final channel-state flush and the recording terminal signal legitimately
33
+ * arrive after the session closed. Loading as the caller also applies the entity's row-level security.
32
34
  *
33
35
  * @throws RealtimeSessionNotFoundError when the row does not load
34
- * @throws RealtimeSessionOwnershipError when the caller is not the owner (logged with both user ids)
36
+ * @throws RealtimeSessionOwnershipError when another user owns the session (logged with both user ids) or
37
+ * the scope rule refuses the caller (logged with the refusal reason)
35
38
  */
36
39
  export async function LoadOwnedRealtimeSession(agentSessionId, contextUser, provider) {
37
40
  const session = await provider.GetEntityObject(SESSION_ENTITY, contextUser);
@@ -42,6 +45,12 @@ export async function LoadOwnedRealtimeSession(agentSessionId, contextUser, prov
42
45
  LogError(`LoadOwnedRealtimeSession: ownership check failed — user ${contextUser.ID} attempted to operate on session ${agentSessionId} owned by ${session.UserID}`);
43
46
  throw new RealtimeSessionOwnershipError(agentSessionId);
44
47
  }
48
+ const conversation = await LoadSessionConversationScope(session, contextUser, provider);
49
+ const access = AuthorizeSessionAccess({ SessionUserID: session.UserID, ConversationExternalID: conversation.ExternalID, ConversationReadable: conversation.Readable }, contextUser);
50
+ if (!access.Allowed) {
51
+ LogError(`LoadOwnedRealtimeSession: session access refused (${access.Reason}) — user ${contextUser.ID} attempted to operate on session ${agentSessionId}`);
52
+ throw new RealtimeSessionOwnershipError(agentSessionId);
53
+ }
45
54
  return session;
46
55
  }
47
56
  //# sourceMappingURL=ownedRealtimeSession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ownedRealtimeSession.js","sourceRoot":"","sources":["../../src/realtimeSessions/ownedRealtimeSession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,gEAAgE;AAChE,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACnD,YAA4B,cAAsB;QAC9C,KAAK,CAAC,oBAAoB,cAAc,YAAY,CAAC,CAAC;QAD9B,mBAAc,GAAd,cAAc,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,CAAC;CACJ;AAED,sDAAsD;AACtD,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACpD,YAA4B,cAAsB;QAC9C,KAAK,CAAC,sDAAsD,CAAC,CAAC;QADtC,mBAAc,GAAd,cAAc,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAChD,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,cAAsB,EACtB,WAAqB,EACrB,QAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAyB,cAAc,EAAE,WAAW,CAAC,CAAC;IACpG,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,4BAA4B,CAAC,cAAc,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9C,QAAQ,CACJ,2DAA2D,WAAW,CAAC,EAAE,oCAAoC,cAAc,aAAa,OAAO,CAAC,MAAM,EAAE,CAC3J,CAAC;QACF,MAAM,IAAI,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"ownedRealtimeSession.js","sourceRoot":"","sources":["../../src/realtimeSessions/ownedRealtimeSession.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAqB,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAE1F,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAE/C,gEAAgE;AAChE,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACnD,YAA4B,cAAsB;QAC9C,KAAK,CAAC,oBAAoB,cAAc,YAAY,CAAC,CAAC;QAD9B,mBAAc,GAAd,cAAc,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,CAAC;CACJ;AAED,qKAAqK;AACrK,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACpD,YAA4B,cAAsB;QAC9C,KAAK,CAAC,sDAAsD,CAAC,CAAC;QADtC,mBAAc,GAAd,cAAc,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAChD,CAAC;CACJ;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,cAAsB,EACtB,WAAqB,EACrB,QAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAyB,cAAc,EAAE,WAAW,CAAC,CAAC;IACpG,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,4BAA4B,CAAC,cAAc,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9C,QAAQ,CACJ,2DAA2D,WAAW,CAAC,EAAE,oCAAoC,cAAc,aAAa,OAAO,CAAC,MAAM,EAAE,CAC3J,CAAC;QACF,MAAM,IAAI,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,4BAA4B,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,sBAAsB,CACjC,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,YAAY,CAAC,UAAU,EAAE,oBAAoB,EAAE,YAAY,CAAC,QAAQ,EAAE,EAC/H,WAAW,CACd,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,QAAQ,CACJ,qDAAqD,MAAM,CAAC,MAAM,YAAY,WAAW,CAAC,EAAE,oCAAoC,cAAc,EAAE,CACnJ,CAAC;QACF,MAAM,IAAI,6BAA6B,CAAC,cAAc,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -9,13 +9,17 @@
9
9
  * ## The two ownership rules
10
10
  *
11
11
  * 1. **Owner.** The session's `UserID` must be the caller's user.
12
- * 2. **Scope.** A *named* user is fully identified by (1). An **anonymous widget guest** is not:
13
- * every guest authenticates as the one shared Anonymous user, so (1) alone would let any guest
14
- * address any other guest's session. What separates guests is the signed per-session scope in
15
- * their token (`MagicLinkScope.ResourceID`), which `SessionManager` stamps onto the session's
16
- * Conversation as `ExternalID`. So a principal that carries a scope must match it, and an
17
- * anonymous principal that carries NO scope is refused outright — it cannot be told apart from
18
- * every other anonymous principal.
12
+ * 2. **Scope.** A *named* user is fully identified by (1). An **anonymous visitor** (widget guest or
13
+ * anonymous magic-link invitee) is not: every one authenticates as the one shared Anonymous user, so
14
+ * (1) alone would let any visitor address any other visitor's session. What separates them is the
15
+ * scope identity {@link ResolveSessionScopeIdentity} reads off the signed token — the resource scope
16
+ * (`MagicLinkScope.ResourceID`) when the token carries one, else the per-token `mj_sid`
17
+ * (`AnonymousVisitorID`). `SessionManager` stamps that same value onto the session's Conversation as
18
+ * `ExternalID`, so a principal with a scope identity must match it, and an anonymous principal with
19
+ * none is refused outright — it cannot be told apart from every other anonymous principal.
20
+ * One allowance: a NAMED principal with a resource scope may also use its own session whose
21
+ * conversation carries no stamp at all, when it could read that conversation (see the comment in
22
+ * {@link AuthorizeSessionAccess}).
19
23
  *
20
24
  * The decision is deliberately pure (no I/O) so it can be applied identically to a freshly loaded
21
25
  * row at subscribe time and to the owner/scope snapshot carried inside each published event.
@@ -34,13 +38,21 @@ export interface SessionAccessSubject {
34
38
  * could not be loaded.
35
39
  */
36
40
  ConversationExternalID: string | null | undefined;
41
+ /**
42
+ * True when the conversation was loaded under the CALLER's identity (so its row-level security allowed
43
+ * the read). Only consulted for a named principal with a resource scope on a conversation that carries
44
+ * no `ExternalID`; omitted means unknown and is treated as unreadable (fail closed).
45
+ */
46
+ ConversationReadable?: boolean;
37
47
  }
38
48
  /** What the decision needs to know about the caller (a subset of `UserInfo`). */
39
49
  export interface SessionAccessPrincipal {
40
50
  /** The caller's user id. */
41
51
  ID: string;
42
- /** True for the shared-Anonymous-user principal of a public-widget guest. */
52
+ /** True for the shared-Anonymous-user principal of a public-widget guest or anonymous magic-link invitee. */
43
53
  IsMagicLinkAnonymous?: boolean;
54
+ /** Per-visitor session identity (`mj_sid`) for an anonymous principal. */
55
+ AnonymousVisitorID?: string;
44
56
  /** The signed per-session scope carried by the caller's token, when any. */
45
57
  MagicLinkScope?: {
46
58
  ResourceID?: string;
@@ -51,10 +63,24 @@ export type SessionAccessRefusal = 'not_owner' | 'scope_missing' | 'scope_mismat
51
63
  /** Outcome of {@link AuthorizeSessionAccess}. */
52
64
  export type SessionAccessDecision = {
53
65
  Allowed: true;
66
+ Reason?: undefined;
54
67
  } | {
55
68
  Allowed: false;
56
69
  Reason: SessionAccessRefusal;
57
70
  };
71
+ /**
72
+ * The scope identity a session is keyed on for `principal` — the one value `SessionManager` stamps as
73
+ * the session conversation's `ExternalID` and {@link AuthorizeSessionAccess} compares against it.
74
+ *
75
+ * - The token's resource scope (`MagicLinkScope.ResourceID`) when it carries one. A widget guest's
76
+ * resource scope IS its `mj_sid`; an anonymous magic-link invite with a `ResourceID` (e.g. a Caliber
77
+ * Invite Scope, one per subject) shares that scope across its redemptions by design, and the
78
+ * `{{ScopeResourceID}}` RLS filters key on the same value, so the visitor can read its own rows.
79
+ * - Otherwise, for an anonymous principal, the per-token `mj_sid` (`AnonymousVisitorID`), which tells two
80
+ * redemptions of an unscoped multi-use invite apart.
81
+ * - Otherwise `undefined` (a named user without a resource scope).
82
+ */
83
+ export declare function ResolveSessionScopeIdentity(principal: SessionAccessPrincipal): string | undefined;
58
84
  /**
59
85
  * Decides whether `principal` may address the session described by `subject`.
60
86
  *
@@ -70,6 +96,8 @@ export interface LoadedSessionForAccess {
70
96
  Session: MJAIAgentSessionEntity;
71
97
  /** The session's conversation `ExternalID` (anonymous scope id), or null. */
72
98
  ConversationExternalID: string | null;
99
+ /** Whether the caller could read the session's conversation (false when there is none). */
100
+ ConversationReadable: boolean;
73
101
  }
74
102
  /**
75
103
  * Loads a session (and its conversation's scope id) under `contextUser`'s identity.
@@ -83,10 +111,59 @@ export interface LoadedSessionForAccess {
83
111
  * which {@link AuthorizeSessionAccess} then treats as "no scope to match" (refused for a scoped caller).
84
112
  */
85
113
  export declare function LoadSessionForAccess(agentSessionId: string, contextUser: UserInfo, provider: IMetadataProvider): Promise<LoadedSessionForAccess | null>;
114
+ /** What the caller could learn about a session's conversation: the scope half of {@link SessionAccessSubject}. */
115
+ export interface SessionConversationScope {
116
+ /** The conversation's `ExternalID` (the anonymous scope id), or null when it has none or was not read. */
117
+ ExternalID: string | null;
118
+ /** Whether the caller could read the conversation (false when the session has none). */
119
+ Readable: boolean;
120
+ }
121
+ /** {@link SessionConversationScope} plus the conversation's owner, for a conversation addressed without a session. */
122
+ export interface ConversationScope extends SessionConversationScope {
123
+ /** `Conversation.UserID`, or null when the conversation was not read. */
124
+ UserID: string | null;
125
+ }
126
+ /**
127
+ * Reads an already-loaded session's conversation under `contextUser` (so its row-level security applies).
128
+ * A missing conversation, a refused read and a failed read (logged) all report `Readable: false`. For
129
+ * callers that loaded the session through another gate and only need the scope half of
130
+ * {@link AuthorizeSessionAccess}'s subject.
131
+ */
132
+ export declare function LoadSessionConversationScope(session: MJAIAgentSessionEntity, contextUser: UserInfo, provider: IMetadataProvider): Promise<SessionConversationScope>;
133
+ /**
134
+ * Reads a conversation's owner and scope id under `contextUser` (so its row-level security applies), for a
135
+ * caller that addresses the conversation directly rather than through a session — a text agent turn, for
136
+ * example, whose only handle is a message in it. Together with the caller's principal this is exactly the
137
+ * subject {@link AuthorizeSessionAccess} decides on: `SessionUserID` is the conversation's owner, since the
138
+ * session a conversation belongs to is owned by the same user.
139
+ *
140
+ * An empty id, a missing conversation, a refused read and a failed read (logged) all report
141
+ * `Readable: false` with no owner, which {@link AuthorizeSessionAccess} then refuses for any scoped caller.
142
+ */
143
+ export declare function LoadConversationScope(conversationId: string | null | undefined, contextUser: UserInfo, provider: IMetadataProvider): Promise<ConversationScope>;
144
+ /**
145
+ * Who may run a conversation turn (a text agent turn, addressed by a message in the conversation) in
146
+ * `conversationId`, decided the same way as session access.
147
+ *
148
+ * A NAMED principal is allowed without a read: its entity permissions and row filters already decided
149
+ * whether it could load the message, and a named user is fully identified by its `UserID`. An ANONYMOUS
150
+ * principal is not (see the module doc), so the conversation is read as the caller and
151
+ * {@link AuthorizeSessionAccess} compares its scope id with the conversation's stamp — the same
152
+ * decision #5997 applies to the realtime gates, so the text and voice paths agree on ownership.
153
+ * An unreadable conversation refuses (`not_owner`, there is no owner to match).
154
+ */
155
+ export declare function AuthorizeConversationTurn(conversationId: string, principal: UserInfo, provider: IMetadataProvider): Promise<SessionAccessDecision>;
156
+ /**
157
+ * Whether an anonymous caller owns any of a LiveKit room's agent sessions — the check MJServer registers with
158
+ * `RoomAuthorizationService.SetAnonymousSessionOwnerCheck` (`@memberjunction/livekit-room-server` cannot import
159
+ * this package). Each session is loaded as the caller (its row-level security applies) and decided by
160
+ * {@link AuthorizeSessionAccess}, the same decision every realtime gate makes, so a room admits exactly the visitor
161
+ * whose scope id its session's conversation carries (MJ#6044). Nothing to read, or no provider: refused.
162
+ */
163
+ export declare function AuthorizeAnonymousRoomSessions(agentSessionIds: string[], user: UserInfo, provider: IMetadataProvider | undefined): Promise<boolean>;
86
164
  /**
87
- * Reads an already-loaded session's conversation `ExternalID` (the anonymous scope id) under `contextUser`;
88
- * null when there is no conversation or it cannot be read (logged). For callers that loaded the session
89
- * through another gate and only need the scope half of {@link AuthorizeSessionAccess}'s subject.
165
+ * The session conversation's `ExternalID` alone; null when there is none or it cannot be read.
166
+ * Prefer {@link LoadSessionConversationScope}, which also says whether the read succeeded.
90
167
  */
91
168
  export declare function LoadSessionConversationExternalID(session: MJAIAgentSessionEntity, contextUser: UserInfo, provider: IMetadataProvider): Promise<string | null>;
92
169
  //# sourceMappingURL=sessionAccess.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessionAccess.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,iBAAiB,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,KAAK,EAAE,sBAAsB,EAAwB,MAAM,+BAA+B,CAAC;AAMlG,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACjC,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,sBAAsB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrD;AAED,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACnC,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4EAA4E;IAC5E,cAAc,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACxD;AAED,qFAAqF;AACrF,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAEpF,iDAAiD;AACjD,MAAM,MAAM,qBAAqB,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEzG;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAClC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GACrD,qBAAqB,CAYvB;AAED,0FAA0F;AAC1F,MAAM,WAAW,sBAAsB;IACnC,+FAA+F;IAC/F,OAAO,EAAE,sBAAsB,CAAC;IAChC,6EAA6E;IAC7E,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACtC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CASxC;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACnD,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB"}
1
+ {"version":3,"file":"sessionAccess.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"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"}
@@ -9,13 +9,17 @@
9
9
  * ## The two ownership rules
10
10
  *
11
11
  * 1. **Owner.** The session's `UserID` must be the caller's user.
12
- * 2. **Scope.** A *named* user is fully identified by (1). An **anonymous widget guest** is not:
13
- * every guest authenticates as the one shared Anonymous user, so (1) alone would let any guest
14
- * address any other guest's session. What separates guests is the signed per-session scope in
15
- * their token (`MagicLinkScope.ResourceID`), which `SessionManager` stamps onto the session's
16
- * Conversation as `ExternalID`. So a principal that carries a scope must match it, and an
17
- * anonymous principal that carries NO scope is refused outright — it cannot be told apart from
18
- * every other anonymous principal.
12
+ * 2. **Scope.** A *named* user is fully identified by (1). An **anonymous visitor** (widget guest or
13
+ * anonymous magic-link invitee) is not: every one authenticates as the one shared Anonymous user, so
14
+ * (1) alone would let any visitor address any other visitor's session. What separates them is the
15
+ * scope identity {@link ResolveSessionScopeIdentity} reads off the signed token — the resource scope
16
+ * (`MagicLinkScope.ResourceID`) when the token carries one, else the per-token `mj_sid`
17
+ * (`AnonymousVisitorID`). `SessionManager` stamps that same value onto the session's Conversation as
18
+ * `ExternalID`, so a principal with a scope identity must match it, and an anonymous principal with
19
+ * none is refused outright — it cannot be told apart from every other anonymous principal.
20
+ * One allowance: a NAMED principal with a resource scope may also use its own session whose
21
+ * conversation carries no stamp at all, when it could read that conversation (see the comment in
22
+ * {@link AuthorizeSessionAccess}).
19
23
  *
20
24
  * The decision is deliberately pure (no I/O) so it can be applied identically to a freshly loaded
21
25
  * row at subscribe time and to the owner/scope snapshot carried inside each published event.
@@ -27,6 +31,25 @@ import { IsValidUUID, UUIDsEqual } from '@memberjunction/global';
27
31
  /** Entity names, centralised so the `MJ: ` prefix convention lives in one place. */
28
32
  const SESSION_ENTITY = 'MJ: AI Agent Sessions';
29
33
  const CONVERSATION_ENTITY = 'MJ: Conversations';
34
+ /**
35
+ * The scope identity a session is keyed on for `principal` — the one value `SessionManager` stamps as
36
+ * the session conversation's `ExternalID` and {@link AuthorizeSessionAccess} compares against it.
37
+ *
38
+ * - The token's resource scope (`MagicLinkScope.ResourceID`) when it carries one. A widget guest's
39
+ * resource scope IS its `mj_sid`; an anonymous magic-link invite with a `ResourceID` (e.g. a Caliber
40
+ * Invite Scope, one per subject) shares that scope across its redemptions by design, and the
41
+ * `{{ScopeResourceID}}` RLS filters key on the same value, so the visitor can read its own rows.
42
+ * - Otherwise, for an anonymous principal, the per-token `mj_sid` (`AnonymousVisitorID`), which tells two
43
+ * redemptions of an unscoped multi-use invite apart.
44
+ * - Otherwise `undefined` (a named user without a resource scope).
45
+ */
46
+ export function ResolveSessionScopeIdentity(principal) {
47
+ const resourceId = principal.MagicLinkScope?.ResourceID;
48
+ if (resourceId) {
49
+ return resourceId;
50
+ }
51
+ return principal.IsMagicLinkAnonymous ? principal.AnonymousVisitorID || undefined : undefined;
52
+ }
30
53
  /**
31
54
  * Decides whether `principal` may address the session described by `subject`.
32
55
  *
@@ -39,14 +62,26 @@ export function AuthorizeSessionAccess(subject, principal) {
39
62
  if (!principal?.ID || !subject.SessionUserID || !UUIDsEqual(subject.SessionUserID, principal.ID)) {
40
63
  return { Allowed: false, Reason: 'not_owner' };
41
64
  }
42
- const scopeId = principal.MagicLinkScope?.ResourceID;
65
+ const scopeId = ResolveSessionScopeIdentity(principal);
43
66
  if (!scopeId) {
44
- // An anonymous principal without a per-session scope is indistinguishable from every other
45
- // anonymous principal: owning "the Anonymous user's" session proves nothing.
67
+ // A named user without a scope is identified by the owner check alone; an anonymous principal
68
+ // without one cannot be told apart from any other anonymous principal.
46
69
  return principal.IsMagicLinkAnonymous ? { Allowed: false, Reason: 'scope_missing' } : { Allowed: true };
47
70
  }
48
71
  // Scope ids are opaque base64url strings (case-significant), so compare exactly — not UUIDsEqual.
49
- return subject.ConversationExternalID === scopeId ? { Allowed: true } : { Allowed: false, Reason: 'scope_mismatch' };
72
+ if (subject.ConversationExternalID === scopeId) {
73
+ return { Allowed: true };
74
+ }
75
+ // A named user is identified by the owner check; its scope only keeps one link's sessions apart from
76
+ // the same person's other links (magic links resolve the user by email, so one person can hold several).
77
+ // A conversation with no stamp belongs to no link (one started from the Conversations app), so the owner
78
+ // may use it when its own row-level security let it read the conversation. `ExternalID` is not stamped
79
+ // here because other features own that column on their conversations (meeting room names, for example).
80
+ // An anonymous visitor gets no such allowance: the stamp is the only thing that identifies it.
81
+ if (!principal.IsMagicLinkAnonymous && subject.ConversationExternalID === null && subject.ConversationReadable === true) {
82
+ return { Allowed: true };
83
+ }
84
+ return { Allowed: false, Reason: 'scope_mismatch' };
50
85
  }
51
86
  /**
52
87
  * Loads a session (and its conversation's scope id) under `contextUser`'s identity.
@@ -67,28 +102,96 @@ export async function LoadSessionForAccess(agentSessionId, contextUser, provider
67
102
  if (!(await session.Load(agentSessionId))) {
68
103
  return null;
69
104
  }
70
- return { Session: session, ConversationExternalID: await LoadSessionConversationExternalID(session, contextUser, provider) };
105
+ const conversation = await LoadSessionConversationScope(session, contextUser, provider);
106
+ return { Session: session, ConversationExternalID: conversation.ExternalID, ConversationReadable: conversation.Readable };
71
107
  }
72
108
  /**
73
- * Reads an already-loaded session's conversation `ExternalID` (the anonymous scope id) under `contextUser`;
74
- * null when there is no conversation or it cannot be read (logged). For callers that loaded the session
75
- * through another gate and only need the scope half of {@link AuthorizeSessionAccess}'s subject.
109
+ * Reads an already-loaded session's conversation under `contextUser` (so its row-level security applies).
110
+ * A missing conversation, a refused read and a failed read (logged) all report `Readable: false`. For
111
+ * callers that loaded the session through another gate and only need the scope half of
112
+ * {@link AuthorizeSessionAccess}'s subject.
76
113
  */
77
- export async function LoadSessionConversationExternalID(session, contextUser, provider) {
114
+ export async function LoadSessionConversationScope(session, contextUser, provider) {
78
115
  if (!session.ConversationID) {
79
- return null;
116
+ return { ExternalID: null, Readable: false };
117
+ }
118
+ const { ExternalID, Readable } = await LoadConversationScope(session.ConversationID, contextUser, provider);
119
+ return { ExternalID, Readable };
120
+ }
121
+ /**
122
+ * Reads a conversation's owner and scope id under `contextUser` (so its row-level security applies), for a
123
+ * caller that addresses the conversation directly rather than through a session — a text agent turn, for
124
+ * example, whose only handle is a message in it. Together with the caller's principal this is exactly the
125
+ * subject {@link AuthorizeSessionAccess} decides on: `SessionUserID` is the conversation's owner, since the
126
+ * session a conversation belongs to is owned by the same user.
127
+ *
128
+ * An empty id, a missing conversation, a refused read and a failed read (logged) all report
129
+ * `Readable: false` with no owner, which {@link AuthorizeSessionAccess} then refuses for any scoped caller.
130
+ */
131
+ export async function LoadConversationScope(conversationId, contextUser, provider) {
132
+ const unreadable = { UserID: null, ExternalID: null, Readable: false };
133
+ if (!conversationId) {
134
+ return unreadable;
80
135
  }
81
136
  try {
82
137
  const conversation = await provider.GetEntityObject(CONVERSATION_ENTITY, contextUser);
83
- if (!(await conversation.Load(session.ConversationID))) {
84
- return null;
138
+ if (!(await conversation.Load(conversationId))) {
139
+ return unreadable;
85
140
  }
86
- return conversation.ExternalID ?? null;
141
+ return { UserID: conversation.UserID ?? null, ExternalID: conversation.ExternalID ?? null, Readable: true };
87
142
  }
88
143
  catch (error) {
89
144
  const message = error instanceof Error ? error.message : String(error);
90
- LogError(`LoadSessionForAccess: could not read conversation ${session.ConversationID} of session ${session.ID}: ${message}`);
91
- return null;
145
+ LogError(`LoadConversationScope: could not read conversation ${conversationId} for user ${contextUser?.ID}: ${message}`);
146
+ return unreadable;
92
147
  }
93
148
  }
149
+ /**
150
+ * Who may run a conversation turn (a text agent turn, addressed by a message in the conversation) in
151
+ * `conversationId`, decided the same way as session access.
152
+ *
153
+ * A NAMED principal is allowed without a read: its entity permissions and row filters already decided
154
+ * whether it could load the message, and a named user is fully identified by its `UserID`. An ANONYMOUS
155
+ * principal is not (see the module doc), so the conversation is read as the caller and
156
+ * {@link AuthorizeSessionAccess} compares its scope id with the conversation's stamp — the same
157
+ * decision #5997 applies to the realtime gates, so the text and voice paths agree on ownership.
158
+ * An unreadable conversation refuses (`not_owner`, there is no owner to match).
159
+ */
160
+ export async function AuthorizeConversationTurn(conversationId, principal, provider) {
161
+ if (!principal?.IsMagicLinkAnonymous) {
162
+ return { Allowed: true };
163
+ }
164
+ const scope = await LoadConversationScope(conversationId, principal, provider);
165
+ return AuthorizeSessionAccess({ SessionUserID: scope.UserID ?? '', ConversationExternalID: scope.ExternalID, ConversationReadable: scope.Readable }, principal);
166
+ }
167
+ /**
168
+ * Whether an anonymous caller owns any of a LiveKit room's agent sessions — the check MJServer registers with
169
+ * `RoomAuthorizationService.SetAnonymousSessionOwnerCheck` (`@memberjunction/livekit-room-server` cannot import
170
+ * this package). Each session is loaded as the caller (its row-level security applies) and decided by
171
+ * {@link AuthorizeSessionAccess}, the same decision every realtime gate makes, so a room admits exactly the visitor
172
+ * whose scope id its session's conversation carries (MJ#6044). Nothing to read, or no provider: refused.
173
+ */
174
+ export async function AuthorizeAnonymousRoomSessions(agentSessionIds, user, provider) {
175
+ if (agentSessionIds.length === 0 || !provider) {
176
+ return false;
177
+ }
178
+ for (const agentSessionId of agentSessionIds) {
179
+ const loaded = await LoadSessionForAccess(agentSessionId, user, provider);
180
+ if (!loaded) {
181
+ continue;
182
+ }
183
+ const decision = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable }, user);
184
+ if (decision.Allowed) {
185
+ return true;
186
+ }
187
+ }
188
+ return false;
189
+ }
190
+ /**
191
+ * The session conversation's `ExternalID` alone; null when there is none or it cannot be read.
192
+ * Prefer {@link LoadSessionConversationScope}, which also says whether the read succeeded.
193
+ */
194
+ export async function LoadSessionConversationExternalID(session, contextUser, provider) {
195
+ return (await LoadSessionConversationScope(session, contextUser, provider)).ExternalID;
196
+ }
94
197
  //# sourceMappingURL=sessionAccess.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessionAccess.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessionAccess.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionAccess.ts"],"names":[],"mappings":"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"}
@@ -84,7 +84,7 @@ export async function LoadInheritedVerifiedIdentity(lastSessionId, contextUser,
84
84
  if (!prior) {
85
85
  return undefined;
86
86
  }
87
- const decision = AuthorizeSessionAccess({ SessionUserID: prior.Session.UserID, ConversationExternalID: prior.ConversationExternalID }, contextUser);
87
+ const decision = AuthorizeSessionAccess({ SessionUserID: prior.Session.UserID, ConversationExternalID: prior.ConversationExternalID, ConversationReadable: prior.ConversationReadable }, contextUser);
88
88
  if (decision.Allowed === false) {
89
89
  return undefined;
90
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sessionConfigStamps.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionConfigStamps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EACH,mDAAmD,EACnD,mCAAmC,EACnC,sBAAsB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,iBAAiB,EACjB,6BAA6B,EAC7B,8BAA8B,GAGjC,MAAM,uBAAuB,CAAC;AAO/B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACG,MAAM,KAAK,GAAG,mDAAmD,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,aAAa,GAAG,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IACjH,MAAM,KAAK,GAA8B;QACrC,GAAG,aAAa;QAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAClI,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,UAAU;QAC1B,CAAC,CAAC,sBAAsB,CAAC,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;QAC7H,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,aAAa,EAAE,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;AACzG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAC/C,aAAiC,EACjC,WAAqB,EACrB,QAA2B;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,CACnC,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE,EAC7F,WAAW,CACd,CAAC;IACF,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC,QAAQ,CAAC;AAC9G,CAAC"}
1
+ {"version":3,"file":"sessionConfigStamps.js","sourceRoot":"","sources":["../../src/realtimeSessions/sessionConfigStamps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EACH,mDAAmD,EACnD,mCAAmC,EACnC,sBAAsB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,iBAAiB,EACjB,6BAA6B,EAC7B,8BAA8B,GAGjC,MAAM,uBAAuB,CAAC;AAO/B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACG,MAAM,KAAK,GAAG,mDAAmD,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,aAAa,GAAG,6BAA6B,CAAC,IAAI,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IACjH,MAAM,KAAK,GAA8B;QACrC,GAAG,aAAa;QAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAClI,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAC5F,MAAM,WAAW,GAAG,UAAU;QAC1B,CAAC,CAAC,sBAAsB,CAAC,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;QAC7H,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,aAAa,EAAE,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;AACzG,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAC/C,aAAiC,EACjC,WAAqB,EACrB,QAA2B;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,CACnC,EAAE,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAC/I,WAAW,CACd,CAAC;IACF,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC,QAAQ,CAAC;AAC9G,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptionAuthorization.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/subscriptionAuthorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgD,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAUD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,gCAAgC,CAAC;IAC1C,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,4BAA4B,GAAG,SAAS,CAAC;CACrD,GAAG,OAAO,CAUV;AAED,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC1C,mDAAmD;IACnD,WAAW,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC7H,2FAA2F;IAC3F,WAAW,EAAE,MAAM,iBAAiB,CAAC;CACxC;AAED,+BAA+B;AAC/B,eAAO,MAAM,uCAAuC,EAAE,6BAGrD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,oCAAoC,CACtD,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,4BAA4B,GAAG,SAAS,EACjD,IAAI,GAAE,6BAAuE,GAC9E,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
1
+ {"version":3,"file":"subscriptionAuthorization.d.ts","sourceRoot":"","sources":["../../src/realtimeSessions/subscriptionAuthorization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgD,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC/G,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAUD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,gCAAgC,CAAC;IAC1C,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,4BAA4B,GAAG,SAAS,CAAC;CACrD,GAAG,OAAO,CAYV;AAED,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC1C,mDAAmD;IACnD,WAAW,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC7H,2FAA2F;IAC3F,WAAW,EAAE,MAAM,iBAAiB,CAAC;CACxC;AAED,+BAA+B;AAC/B,eAAO,MAAM,uCAAuC,EAAE,6BAGrD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,oCAAoC,CACtD,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,4BAA4B,GAAG,SAAS,EACjD,IAAI,GAAE,6BAAuE,GAC9E,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -34,7 +34,10 @@ export function RealtimeSessionEventsFilter(data) {
34
34
  if (typeof args?.agentSessionId !== 'string' || !payload?.AgentSessionID || !UUIDsEqual(payload.AgentSessionID, args.agentSessionId)) {
35
35
  return false;
36
36
  }
37
- const decision = AuthorizeSessionAccess({ SessionUserID: payload.OwnerUserID, ConversationExternalID: payload.ScopeKey }, connectionPrincipal(context));
37
+ const decision = AuthorizeSessionAccess(
38
+ // Readability is per caller and was proven when this subscription opened (it only receives events for
39
+ // that one session); the snapshot carries just the stamp, so a null ScopeKey stays usable by that owner.
40
+ { SessionUserID: payload.OwnerUserID, ConversationExternalID: payload.ScopeKey, ConversationReadable: true }, connectionPrincipal(context));
38
41
  return decision.Allowed;
39
42
  }
40
43
  /** Production dependencies. */
@@ -61,7 +64,7 @@ export async function AuthorizeRealtimeSessionSubscription(args, context, deps =
61
64
  if (!loaded) {
62
65
  throw new Error(REFUSAL_MESSAGE);
63
66
  }
64
- const decision = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID }, principal);
67
+ const decision = AuthorizeSessionAccess({ SessionUserID: loaded.Session.UserID, ConversationExternalID: loaded.ConversationExternalID, ConversationReadable: loaded.ConversationReadable }, principal);
65
68
  if (decision.Allowed === false) {
66
69
  LogError(`RealtimeSessionEvents: refused subscription by user ${principal.ID} to session ${agentSessionId} (${decision.Reason}).`);
67
70
  throw new Error(REFUSAL_MESSAGE);