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

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 (543) hide show
  1. package/README.md +20 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
  4. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
  5. package/dist/agentSessions/BridgeHostInstance.js +30 -0
  6. package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
  7. package/dist/agentSessions/HostInstance.d.ts +75 -11
  8. package/dist/agentSessions/HostInstance.d.ts.map +1 -1
  9. package/dist/agentSessions/HostInstance.js +99 -28
  10. package/dist/agentSessions/HostInstance.js.map +1 -1
  11. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  12. package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
  13. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  14. package/dist/agentSessions/SessionJanitor.d.ts +236 -27
  15. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  16. package/dist/agentSessions/SessionJanitor.js +682 -54
  17. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  18. package/dist/agentSessions/SessionManager.d.ts +48 -3
  19. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  20. package/dist/agentSessions/SessionManager.js +112 -9
  21. package/dist/agentSessions/SessionManager.js.map +1 -1
  22. package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
  23. package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
  24. package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
  25. package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
  26. package/dist/agentSessions/index.d.ts +2 -0
  27. package/dist/agentSessions/index.d.ts.map +1 -1
  28. package/dist/agentSessions/index.js +10 -3
  29. package/dist/agentSessions/index.js.map +1 -1
  30. package/dist/apiRoot.d.ts +32 -0
  31. package/dist/apiRoot.d.ts.map +1 -0
  32. package/dist/apiRoot.js +67 -0
  33. package/dist/apiRoot.js.map +1 -0
  34. package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
  35. package/dist/auth/AuthProviderCatalogRouter.js +25 -0
  36. package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
  37. package/dist/auth/LoginScreenEngine.d.ts +22 -0
  38. package/dist/auth/LoginScreenEngine.d.ts.map +1 -0
  39. package/dist/auth/LoginScreenEngine.js +57 -0
  40. package/dist/auth/LoginScreenEngine.js.map +1 -0
  41. package/dist/auth/actionAuthorization.d.ts +40 -0
  42. package/dist/auth/actionAuthorization.d.ts.map +1 -0
  43. package/dist/auth/actionAuthorization.js +94 -0
  44. package/dist/auth/actionAuthorization.js.map +1 -0
  45. package/dist/auth/index.d.ts +1 -0
  46. package/dist/auth/index.d.ts.map +1 -1
  47. package/dist/auth/index.js +4 -10
  48. package/dist/auth/index.js.map +1 -1
  49. package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
  50. package/dist/auth/magicLink/MagicLinkRouter.js +3 -2
  51. package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
  52. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  53. package/dist/auth/magicLink/MagicLinkService.js +6 -3
  54. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  55. package/dist/auth/newUsers.d.ts +10 -0
  56. package/dist/auth/newUsers.d.ts.map +1 -1
  57. package/dist/auth/newUsers.js +80 -11
  58. package/dist/auth/newUsers.js.map +1 -1
  59. package/dist/config.d.ts +2514 -22
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/config.js +166 -4
  62. package/dist/config.js.map +1 -1
  63. package/dist/context.d.ts +8 -0
  64. package/dist/context.d.ts.map +1 -1
  65. package/dist/context.js +14 -11
  66. package/dist/context.js.map +1 -1
  67. package/dist/coreRoutes.d.ts +29 -0
  68. package/dist/coreRoutes.d.ts.map +1 -0
  69. package/dist/coreRoutes.js +142 -0
  70. package/dist/coreRoutes.js.map +1 -0
  71. package/dist/generated/graphql-schemas/__mj.d.ts +504 -3
  72. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  73. package/dist/generated/graphql-schemas/__mj.js +2456 -7
  74. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  75. package/dist/generic/CacheInvalidationResolver.d.ts +43 -8
  76. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
  77. package/dist/generic/CacheInvalidationResolver.js +59 -19
  78. package/dist/generic/CacheInvalidationResolver.js.map +1 -1
  79. package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
  80. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  81. package/dist/generic/PushStatusResolver.js +1 -1
  82. package/dist/generic/PushStatusResolver.js.map +1 -1
  83. package/dist/generic/ResolverBase.d.ts +123 -48
  84. package/dist/generic/ResolverBase.d.ts.map +1 -1
  85. package/dist/generic/ResolverBase.js +293 -305
  86. package/dist/generic/ResolverBase.js.map +1 -1
  87. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  88. package/dist/generic/RunViewResolver.js +16 -0
  89. package/dist/generic/RunViewResolver.js.map +1 -1
  90. package/dist/globalCors.d.ts +33 -0
  91. package/dist/globalCors.d.ts.map +1 -0
  92. package/dist/globalCors.js +58 -0
  93. package/dist/globalCors.js.map +1 -0
  94. package/dist/index.d.ts +17 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +219 -278
  97. package/dist/index.js.map +1 -1
  98. package/dist/isolatedProvider.d.ts +20 -0
  99. package/dist/isolatedProvider.d.ts.map +1 -0
  100. package/dist/isolatedProvider.js +22 -0
  101. package/dist/isolatedProvider.js.map +1 -0
  102. package/dist/multiTenancy/index.d.ts.map +1 -1
  103. package/dist/multiTenancy/index.js +22 -2
  104. package/dist/multiTenancy/index.js.map +1 -1
  105. package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
  106. package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
  107. package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
  108. package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
  109. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
  110. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
  111. package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
  112. package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
  113. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
  114. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
  115. package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
  116. package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
  117. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
  118. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
  119. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +139 -0
  120. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
  121. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
  122. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
  123. package/dist/realtimeSessions/RealtimeVerifyRouter.js +99 -0
  124. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
  125. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts +100 -0
  126. package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts.map +1 -0
  127. package/dist/realtimeSessions/RecordingAssemblyScheduler.js +173 -0
  128. package/dist/realtimeSessions/RecordingAssemblyScheduler.js.map +1 -0
  129. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
  130. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
  131. package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
  132. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
  133. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
  134. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
  135. package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
  136. package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
  137. package/dist/realtimeSessions/index.d.ts +19 -0
  138. package/dist/realtimeSessions/index.d.ts.map +1 -0
  139. package/dist/realtimeSessions/index.js +19 -0
  140. package/dist/realtimeSessions/index.js.map +1 -0
  141. package/dist/realtimeSessions/ownedRealtimeSession.d.ts +30 -0
  142. package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -0
  143. package/dist/realtimeSessions/ownedRealtimeSession.js +47 -0
  144. package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -0
  145. package/dist/realtimeSessions/sessionAccess.d.ts +92 -0
  146. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
  147. package/dist/realtimeSessions/sessionAccess.js +94 -0
  148. package/dist/realtimeSessions/sessionAccess.js.map +1 -0
  149. package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
  150. package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
  151. package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
  152. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
  153. package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
  154. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
  155. package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
  156. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
  157. package/dist/realtimeSessions/verificationCore.d.ts +243 -0
  158. package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
  159. package/dist/realtimeSessions/verificationCore.js +356 -0
  160. package/dist/realtimeSessions/verificationCore.js.map +1 -0
  161. package/dist/realtimeSessions/verificationPages.d.ts +66 -0
  162. package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
  163. package/dist/realtimeSessions/verificationPages.js +110 -0
  164. package/dist/realtimeSessions/verificationPages.js.map +1 -0
  165. package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
  166. package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
  167. package/dist/realtimeSessions/verificationPolicy.js +249 -0
  168. package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
  169. package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
  170. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
  171. package/dist/realtimeSessions/verificationWorkflow.js +435 -0
  172. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
  173. package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
  174. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  175. package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
  176. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  177. package/dist/resolvers/ActionResolver.d.ts +31 -5
  178. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  179. package/dist/resolvers/ActionResolver.js +75 -14
  180. package/dist/resolvers/ActionResolver.js.map +1 -1
  181. package/dist/resolvers/AdhocQueryResolver.d.ts +14 -1
  182. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  183. package/dist/resolvers/AdhocQueryResolver.js +21 -5
  184. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  185. package/dist/resolvers/ArtifactFileResolver.d.ts +5 -1
  186. package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -1
  187. package/dist/resolvers/ArtifactFileResolver.js +9 -7
  188. package/dist/resolvers/ArtifactFileResolver.js.map +1 -1
  189. package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
  190. package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
  191. package/dist/resolvers/CacheStatsResolver.js +113 -2
  192. package/dist/resolvers/CacheStatsResolver.js.map +1 -1
  193. package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
  194. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
  195. package/dist/resolvers/ClientToolRequestResolver.js +28 -10
  196. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
  197. package/dist/resolvers/ConversationRunEventsResolver.d.ts +8 -4
  198. package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
  199. package/dist/resolvers/ConversationRunEventsResolver.js +6 -6
  200. package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
  201. package/dist/resolvers/DatasetResolver.d.ts +24 -3
  202. package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
  203. package/dist/resolvers/DatasetResolver.js +57 -8
  204. package/dist/resolvers/DatasetResolver.js.map +1 -1
  205. package/dist/resolvers/EntityRecordNameResolver.d.ts +2 -1
  206. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
  207. package/dist/resolvers/EntityRecordNameResolver.js +3 -2
  208. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
  209. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +27 -1
  210. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  211. package/dist/resolvers/FetchEntityVectorsResolver.js +148 -2
  212. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  213. package/dist/resolvers/FileResolver.d.ts +82 -11
  214. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  215. package/dist/resolvers/FileResolver.js +279 -101
  216. package/dist/resolvers/FileResolver.js.map +1 -1
  217. package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
  218. package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
  219. package/dist/resolvers/GetDataContextDataResolver.js +117 -38
  220. package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
  221. package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
  222. package/dist/resolvers/GetDataResolver.js +6 -3
  223. package/dist/resolvers/GetDataResolver.js.map +1 -1
  224. package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -1
  225. package/dist/resolvers/HumanHandoffResolver.js +7 -1
  226. package/dist/resolvers/HumanHandoffResolver.js.map +1 -1
  227. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  228. package/dist/resolvers/IntegrationDiscoveryResolver.js +4 -2
  229. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  230. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  231. package/dist/resolvers/MCPResolver.js +9 -4
  232. package/dist/resolvers/MCPResolver.js.map +1 -1
  233. package/dist/resolvers/QueryResolver.d.ts +2 -0
  234. package/dist/resolvers/QueryResolver.d.ts.map +1 -1
  235. package/dist/resolvers/QueryResolver.js +13 -0
  236. package/dist/resolvers/QueryResolver.js.map +1 -1
  237. package/dist/resolvers/RealtimeBridgeResolver.d.ts +54 -2
  238. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  239. package/dist/resolvers/RealtimeBridgeResolver.js +155 -10
  240. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  241. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +157 -33
  242. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  243. package/dist/resolvers/RealtimeClientSessionResolver.js +404 -116
  244. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  245. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
  246. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
  247. package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
  248. package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
  249. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
  250. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
  251. package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
  252. package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
  253. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
  254. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  255. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
  256. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  257. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
  258. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  259. package/dist/resolvers/RunAIAgentResolver.js +100 -14
  260. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  261. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  262. package/dist/resolvers/RunTemplateResolver.js +12 -11
  263. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  264. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts +12 -1
  265. package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -1
  266. package/dist/resolvers/SearchKnowledgeStreamResolver.js +15 -2
  267. package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
  268. package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
  269. package/dist/resolvers/SqlLoggingConfigResolver.js +2 -3
  270. package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
  271. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  272. package/dist/resolvers/SyncDataResolver.js +6 -2
  273. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  274. package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
  275. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  276. package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
  277. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  278. package/dist/resolvers/TaskGraphFrameResolver.d.ts +2 -1
  279. package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
  280. package/dist/resolvers/TaskGraphFrameResolver.js +28 -1
  281. package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
  282. package/dist/resolvers/TestQuerySQLResolver.d.ts +24 -0
  283. package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
  284. package/dist/resolvers/TestQuerySQLResolver.js +65 -13
  285. package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
  286. package/dist/resolvers/TransactionGroupResolver.d.ts +19 -2
  287. package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
  288. package/dist/resolvers/TransactionGroupResolver.js +102 -24
  289. package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
  290. package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
  291. package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
  292. package/dist/resolvers/UserAvatarResolver.js +124 -0
  293. package/dist/resolvers/UserAvatarResolver.js.map +1 -0
  294. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  295. package/dist/resolvers/UserResolver.js +2 -17
  296. package/dist/resolvers/UserResolver.js.map +1 -1
  297. package/dist/resolvers/agent-run-data-guard.d.ts +31 -0
  298. package/dist/resolvers/agent-run-data-guard.d.ts.map +1 -0
  299. package/dist/resolvers/agent-run-data-guard.js +72 -0
  300. package/dist/resolvers/agent-run-data-guard.js.map +1 -0
  301. package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
  302. package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
  303. package/dist/resolvers/agentVisionConsentAudit.js +63 -0
  304. package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
  305. package/dist/resolvers/avatarInputValidation.d.ts +40 -0
  306. package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
  307. package/dist/resolvers/avatarInputValidation.js +97 -0
  308. package/dist/resolvers/avatarInputValidation.js.map +1 -0
  309. package/dist/resolvers/currentUserRoles.d.ts +29 -0
  310. package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
  311. package/dist/resolvers/currentUserRoles.js +30 -0
  312. package/dist/resolvers/currentUserRoles.js.map +1 -1
  313. package/dist/resolvers/meetings/meetingMutations.d.ts +6 -0
  314. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
  315. package/dist/resolvers/meetings/meetingMutations.js +21 -0
  316. package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
  317. package/dist/rest/RealtimeRecordingHandler.d.ts +49 -0
  318. package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -0
  319. package/dist/rest/RealtimeRecordingHandler.js +383 -0
  320. package/dist/rest/RealtimeRecordingHandler.js.map +1 -0
  321. package/dist/rest/ViewOperationsHandler.d.ts +3 -1
  322. package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
  323. package/dist/rest/ViewOperationsHandler.js +21 -12
  324. package/dist/rest/ViewOperationsHandler.js.map +1 -1
  325. package/dist/rest/setupRESTEndpoints.d.ts +6 -0
  326. package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
  327. package/dist/rest/setupRESTEndpoints.js +6 -0
  328. package/dist/rest/setupRESTEndpoints.js.map +1 -1
  329. package/dist/serverExtensionReservedRoots.d.ts +12 -10
  330. package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
  331. package/dist/serverExtensionReservedRoots.js +14 -17
  332. package/dist/serverExtensionReservedRoots.js.map +1 -1
  333. package/dist/services/MJStorageBlobStore.d.ts +8 -1
  334. package/dist/services/MJStorageBlobStore.d.ts.map +1 -1
  335. package/dist/services/MJStorageBlobStore.js +25 -19
  336. package/dist/services/MJStorageBlobStore.js.map +1 -1
  337. package/dist/services/StartTaskGraphDispatcher.js +2 -2
  338. package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
  339. package/dist/services/TaskGraphActionRunner.d.ts +5 -3
  340. package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
  341. package/dist/services/TaskGraphActionRunner.js +27 -5
  342. package/dist/services/TaskGraphActionRunner.js.map +1 -1
  343. package/dist/services/TaskGraphAgentRunner.d.ts +14 -2
  344. package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
  345. package/dist/services/TaskGraphAgentRunner.js +157 -9
  346. package/dist/services/TaskGraphAgentRunner.js.map +1 -1
  347. package/dist/services/TaskGraphContinuationDeliverer.d.ts +57 -4
  348. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  349. package/dist/services/TaskGraphContinuationDeliverer.js +607 -18
  350. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  351. package/dist/sharedCache.d.ts +105 -0
  352. package/dist/sharedCache.d.ts.map +1 -0
  353. package/dist/sharedCache.js +279 -0
  354. package/dist/sharedCache.js.map +1 -0
  355. package/dist/types.d.ts +6 -0
  356. package/dist/types.d.ts.map +1 -1
  357. package/dist/types.js.map +1 -1
  358. package/package.json +99 -96
  359. package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
  360. package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
  361. package/src/__tests__/BridgeHostInstance.test.ts +232 -0
  362. package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
  363. package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
  364. package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
  365. package/src/__tests__/FetchEntityVectorsResolver.test.ts +433 -0
  366. package/src/__tests__/FileResolver.storageAccess.test.ts +562 -0
  367. package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
  368. package/src/__tests__/HostInstance.test.ts +84 -0
  369. package/src/__tests__/HumanHandoffResolver.test.ts +17 -0
  370. package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
  371. package/src/__tests__/LoginScreenEngine.test.ts +86 -0
  372. package/src/__tests__/MJStorageBlobStore.storageGate.test.ts +63 -0
  373. package/src/__tests__/MeetingResolver.test.ts +75 -1
  374. package/src/__tests__/RealtimeBridgeResolver.test.ts +415 -6
  375. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
  376. package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
  377. package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
  378. package/src/__tests__/RealtimeRelay.test.ts +876 -0
  379. package/src/__tests__/RecordingAssemblyScheduler.test.ts +178 -0
  380. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
  381. package/src/__tests__/ResolverBase.adhocReadScope.test.ts +133 -2
  382. package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
  383. package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
  384. package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
  385. package/src/__tests__/ResolverBase.clientOldValues.test.ts +212 -6
  386. package/src/__tests__/ResolverBase.filterEscaping.test.ts +5 -2
  387. package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
  388. package/src/__tests__/RunAIAgentResolver.branch.test.ts +170 -0
  389. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +6 -4
  390. package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +258 -0
  391. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
  392. package/src/__tests__/RunTemplateResolver.test.ts +132 -0
  393. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
  394. package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
  395. package/src/__tests__/SearchKnowledgeStreamResolver.test.ts +161 -0
  396. package/src/__tests__/SessionJanitor.test.ts +1203 -21
  397. package/src/__tests__/SessionManager.test.ts +240 -17
  398. package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
  399. package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
  400. package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +25 -0
  401. package/src/__tests__/TaskGraphAgentRunner.test.ts +266 -0
  402. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +403 -22
  403. package/src/__tests__/TaskGraphFrameResolver.test.ts +22 -0
  404. package/src/__tests__/TestQuerySQLResolver.test.ts +274 -0
  405. package/src/__tests__/TransactionGroupResolver.refusals.test.ts +98 -1
  406. package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
  407. package/src/__tests__/UserAvatarResolver.test.ts +255 -0
  408. package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
  409. package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
  410. package/src/__tests__/actionAuthorization.test.ts +130 -0
  411. package/src/__tests__/agent-run-data-guard.test.ts +130 -0
  412. package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
  413. package/src/__tests__/apiRootBoot.test.ts +202 -0
  414. package/src/__tests__/avatarInputValidation.test.ts +160 -0
  415. package/src/__tests__/cacheInvalidationRecordData.test.ts +64 -0
  416. package/src/__tests__/conversationRunEvents.test.ts +56 -14
  417. package/src/__tests__/globalCors.test.ts +217 -0
  418. package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
  419. package/src/__tests__/magicLinkService.consume.test.ts +6 -0
  420. package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
  421. package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
  422. package/src/__tests__/multiTenancy.security.test.ts +51 -0
  423. package/src/__tests__/multiTenancy.test.ts +1 -1
  424. package/src/__tests__/newUsers.template.test.ts +151 -0
  425. package/src/__tests__/newUsers.test.ts +74 -5
  426. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
  427. package/src/__tests__/ownedRealtimeSession.test.ts +39 -0
  428. package/src/__tests__/pushStatusResolver.filter.test.ts +7 -0
  429. package/src/__tests__/realtimeRecordingHandler.test.ts +652 -0
  430. package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
  431. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
  432. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
  433. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
  434. package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
  435. package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
  436. package/src/__tests__/realtimeSessions/helpers.ts +4 -0
  437. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
  438. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
  439. package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
  440. package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
  441. package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
  442. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
  443. package/src/__tests__/resolverBase.fls.test.ts +87 -4
  444. package/src/__tests__/serverExtensionHostOverlay.test.ts +66 -0
  445. package/src/__tests__/serverExtensionReservedRoots.test.ts +11 -96
  446. package/src/__tests__/sharedCache.test.ts +312 -0
  447. package/src/__tests__/widgetGuestElevation.test.ts +44 -0
  448. package/src/agentSessions/BridgeHostInstance.ts +32 -0
  449. package/src/agentSessions/HostInstance.ts +124 -28
  450. package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
  451. package/src/agentSessions/SessionJanitor.ts +821 -59
  452. package/src/agentSessions/SessionManager.ts +138 -26
  453. package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
  454. package/src/agentSessions/index.ts +10 -3
  455. package/src/apiRoot.ts +78 -0
  456. package/src/auth/AuthProviderCatalogRouter.ts +26 -0
  457. package/src/auth/LoginScreenEngine.ts +50 -0
  458. package/src/auth/actionAuthorization.ts +116 -0
  459. package/src/auth/index.ts +4 -8
  460. package/src/auth/magicLink/MagicLinkRouter.ts +3 -2
  461. package/src/auth/magicLink/MagicLinkService.ts +6 -3
  462. package/src/auth/newUsers.ts +99 -11
  463. package/src/config.ts +171 -5
  464. package/src/context.ts +15 -10
  465. package/src/coreRoutes.ts +166 -0
  466. package/src/generated/graphql-schemas/__mj.ts +1815 -57
  467. package/src/generic/CacheInvalidationResolver.ts +73 -18
  468. package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
  469. package/src/generic/PushStatusResolver.ts +1 -1
  470. package/src/generic/ResolverBase.ts +335 -326
  471. package/src/generic/RunViewResolver.ts +21 -0
  472. package/src/globalCors.ts +71 -0
  473. package/src/index.ts +231 -300
  474. package/src/isolatedProvider.ts +22 -0
  475. package/src/multiTenancy/index.ts +24 -2
  476. package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
  477. package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
  478. package/src/realtimeSessions/README.md +179 -0
  479. package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
  480. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +168 -0
  481. package/src/realtimeSessions/RealtimeVerifyRouter.ts +109 -0
  482. package/src/realtimeSessions/RecordingAssemblyScheduler.ts +234 -0
  483. package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
  484. package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
  485. package/src/realtimeSessions/index.ts +18 -0
  486. package/src/realtimeSessions/ownedRealtimeSession.ts +55 -0
  487. package/src/realtimeSessions/sessionAccess.ts +145 -0
  488. package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
  489. package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
  490. package/src/realtimeSessions/verificationCore.ts +502 -0
  491. package/src/realtimeSessions/verificationPages.ts +149 -0
  492. package/src/realtimeSessions/verificationPolicy.ts +321 -0
  493. package/src/realtimeSessions/verificationWorkflow.ts +702 -0
  494. package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
  495. package/src/resolvers/ActionResolver.ts +84 -21
  496. package/src/resolvers/AdhocQueryResolver.ts +24 -6
  497. package/src/resolvers/ArtifactFileResolver.ts +9 -8
  498. package/src/resolvers/CacheStatsResolver.ts +89 -2
  499. package/src/resolvers/ClientToolRequestResolver.ts +25 -7
  500. package/src/resolvers/ConversationRunEventsResolver.ts +15 -11
  501. package/src/resolvers/DatasetResolver.ts +70 -10
  502. package/src/resolvers/EntityRecordNameResolver.ts +3 -2
  503. package/src/resolvers/FetchEntityVectorsResolver.ts +179 -2
  504. package/src/resolvers/FileResolver.ts +321 -106
  505. package/src/resolvers/GetDataContextDataResolver.ts +139 -41
  506. package/src/resolvers/GetDataResolver.ts +6 -3
  507. package/src/resolvers/HumanHandoffResolver.ts +8 -0
  508. package/src/resolvers/IntegrationDiscoveryResolver.ts +4 -2
  509. package/src/resolvers/MCPResolver.ts +8 -5
  510. package/src/resolvers/QueryResolver.ts +11 -0
  511. package/src/resolvers/RealtimeBridgeResolver.ts +163 -11
  512. package/src/resolvers/RealtimeClientSessionResolver.ts +511 -129
  513. package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
  514. package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
  515. package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
  516. package/src/resolvers/RunAIAgentResolver.ts +116 -14
  517. package/src/resolvers/RunTemplateResolver.ts +13 -12
  518. package/src/resolvers/SearchKnowledgeStreamResolver.ts +19 -3
  519. package/src/resolvers/SqlLoggingConfigResolver.ts +2 -4
  520. package/src/resolvers/SyncDataResolver.ts +6 -2
  521. package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
  522. package/src/resolvers/TaskGraphFrameResolver.ts +33 -1
  523. package/src/resolvers/TestQuerySQLResolver.ts +68 -13
  524. package/src/resolvers/TransactionGroupResolver.ts +131 -27
  525. package/src/resolvers/UserAvatarResolver.ts +111 -0
  526. package/src/resolvers/UserResolver.ts +2 -16
  527. package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
  528. package/src/resolvers/agent-run-data-guard.ts +89 -0
  529. package/src/resolvers/agentVisionConsentAudit.ts +82 -0
  530. package/src/resolvers/avatarInputValidation.ts +123 -0
  531. package/src/resolvers/currentUserRoles.ts +32 -1
  532. package/src/resolvers/meetings/meetingMutations.ts +21 -0
  533. package/src/rest/RealtimeRecordingHandler.ts +464 -0
  534. package/src/rest/ViewOperationsHandler.ts +29 -13
  535. package/src/rest/setupRESTEndpoints.ts +6 -0
  536. package/src/serverExtensionReservedRoots.ts +14 -17
  537. package/src/services/MJStorageBlobStore.ts +31 -30
  538. package/src/services/StartTaskGraphDispatcher.ts +2 -2
  539. package/src/services/TaskGraphActionRunner.ts +25 -5
  540. package/src/services/TaskGraphAgentRunner.ts +188 -11
  541. package/src/services/TaskGraphContinuationDeliverer.ts +713 -17
  542. package/src/sharedCache.ts +305 -0
  543. package/src/types.ts +7 -0
@@ -0,0 +1,532 @@
1
+ import { WebSocket as WsClient } from 'ws';
2
+ import { REALTIME_RELAY_TIME_LIMIT_CLOSE_CODE, RealtimeProxyRegistry, } from '@memberjunction/ai';
3
+ /** The limits MJAPI runs the relay with. */
4
+ export const REALTIME_RELAY_LIMITS = Object.freeze({
5
+ FirstFrameTimeoutMs: 10_000,
6
+ UpstreamOpenTimeoutMs: 15_000,
7
+ PingIntervalMs: 20_000,
8
+ MaxMissedPongs: 2,
9
+ MaxPendingFrames: 512,
10
+ MaxPendingBytes: 8 * 1024 * 1024,
11
+ MaxBrowserBufferedBytes: 16 * 1024 * 1024,
12
+ MaxUpstreamBufferedBytes: 16 * 1024 * 1024,
13
+ });
14
+ /**
15
+ * The largest client message the relay accepts (2 MiB). The relay's websocket server enforces it while reading, so a
16
+ * larger message closes the browser leg with 1009 before it is buffered.
17
+ */
18
+ export const REALTIME_RELAY_MAX_CLIENT_FRAME_BYTES = 2 * 1024 * 1024;
19
+ /** Close codes the relay sends itself (RFC 6455 §7.4.1). */
20
+ const CLOSE_NORMAL = 1000; // the session ended, or a resume replaced this connection
21
+ const CLOSE_GOING_AWAY = 1001; // MJAPI is shutting down, or the browser left, stopped answering or fell behind
22
+ const CLOSE_NO_STATUS = 1005; // a close without a code: passed on as a close without a code
23
+ const CLOSE_POLICY = 1008; // no opening frame, or the session refused the connection
24
+ const CLOSE_INTERNAL = 1011; // the policy failed (headers, opening frames), or a send failed
25
+ const CLOSE_TRY_AGAIN = 1013; // a leg fell too far behind; the browser may resume on a new connection
26
+ const CLOSE_BAD_GATEWAY = 1014; // the upstream did not open, failed, stopped answering, or dropped without a close code
27
+ const RELAY_LEGS = ['browser', 'upstream'];
28
+ /** The longest delay `setTimeout` takes (about 24.8 days); a longer one would fire at once. */
29
+ const MAX_TIMER_MS = 2_147_483_647;
30
+ /** Distinct drop labels counted per connection; later new labels count as `other`. */
31
+ const MAX_DROP_LABELS = 32;
32
+ /** The first 8 characters of a ticket id, safe to log (never the whole id). */
33
+ export function RelayTicketPrefix(id) {
34
+ return id.replace(/[^A-Za-z0-9-]/g, '').slice(0, 8) || '-';
35
+ }
36
+ /**
37
+ * One browser connection through MJAPI's realtime relay (`/realtime/relay/<ticket>/…`).
38
+ *
39
+ * It waits for the browser's first frame, asks the session's policy what that frame opens, and lets the registry
40
+ * decide (one fresh connection, then resumes with a forwarded handle). Then it opens the upstream with headers the
41
+ * policy mints for this connection, sends the policy's opening frames before anything else, and pumps both ways: client
42
+ * frames through the policy's filter (text only; binary client frames are dropped), server frames unchanged once the
43
+ * policy has looked for a resumption handle. It pings both legs and terminates one that stops answering, closes a
44
+ * browser that cannot keep up with what it is sent and an upstream that stops reading, passes close codes through, and closes when the session ends. Logs
45
+ * carry counts, sizes, codes and an 8-character ticket prefix, never payloads, headers or tokens.
46
+ */
47
+ export class RealtimeRelayTunnel {
48
+ constructor(browser, sessionId, policy, limits, host) {
49
+ this.browser = browser;
50
+ this.sessionId = sessionId;
51
+ this.policy = policy;
52
+ this.limits = limits;
53
+ this.host = host;
54
+ this.upstream = null;
55
+ this.grant = null;
56
+ this.intent = null;
57
+ /** Client frames that passed the filter before the upstream opened, in arrival order. */
58
+ this.pending = [];
59
+ this.pendingBytes = 0;
60
+ /** Dropped client frames per type label. */
61
+ this.drops = new Map();
62
+ this.traffic = { FramesUp: 0, BytesUp: 0, FramesDown: 0, BytesDown: 0 };
63
+ /** Pings each leg has left unanswered since its last pong. */
64
+ this.unanswered = { browser: 0, upstream: 0 };
65
+ this.firstFrameTimer = null;
66
+ this.upstreamTimer = null;
67
+ this.lifetimeTimer = null;
68
+ this.pingTimer = null;
69
+ this.openedAtMs = 0;
70
+ this.browserCloseCode = null;
71
+ this.upstreamCloseNote = '';
72
+ this.closed = false;
73
+ }
74
+ /** The relay session this connection belongs to. */
75
+ get SessionID() {
76
+ return this.sessionId;
77
+ }
78
+ /** Starts the first-frame deadline and the pings, and listens to the browser leg. */
79
+ Start() {
80
+ this.firstFrameTimer = RealtimeRelayTunnel.after(this.limits.FirstFrameTimeoutMs, () => this.refuse('no opening frame in time'));
81
+ this.pingTimer = setInterval(() => this.pingBoth(), this.limits.PingIntervalMs);
82
+ this.pingTimer.unref?.();
83
+ this.browser.on('message', (data, isBinary) => this.onBrowserMessage(data, isBinary));
84
+ this.browser.on('pong', () => (this.unanswered.browser = 0));
85
+ this.browser.on('close', (code, reason) => this.onBrowserClose(code, reason));
86
+ this.browser.on('error', (err) => this.onBrowserError(err));
87
+ }
88
+ /** Closes both legs with `code` and `reason` (no code: a close frame without one). Idempotent. */
89
+ Close(code, reason) {
90
+ this.closeWith({ Code: code, Reason: reason });
91
+ }
92
+ // ── Opening ─────────────────────────────────────────────────────────────────────────────────────
93
+ onBrowserMessage(data, isBinary) {
94
+ if (this.closed) {
95
+ return;
96
+ }
97
+ if (this.grant === null) {
98
+ this.openFromFirstFrame(data, isBinary);
99
+ return;
100
+ }
101
+ this.fromBrowser(data, isBinary);
102
+ }
103
+ /** Reads the first frame's intent, asks the registry, and opens the upstream when the connection is granted. */
104
+ openFromFirstFrame(data, isBinary) {
105
+ RealtimeRelayTunnel.cancel(this.firstFrameTimer);
106
+ this.firstFrameTimer = null;
107
+ const intent = isBinary ? null : this.readIntent(bytesOf(data).toString('utf8'));
108
+ if (!intent) {
109
+ this.refuse('the first frame opens no session');
110
+ return;
111
+ }
112
+ const result = RealtimeProxyRegistry.Instance.OpenRelaySession(this.sessionId, intent);
113
+ if ('Refused' in result) {
114
+ this.refuse(result.Refused);
115
+ return;
116
+ }
117
+ this.intent = intent;
118
+ this.grant = result.Granted;
119
+ this.openedAtMs = Date.now();
120
+ this.host.OnGranted(this);
121
+ // The browser gets the time-limit code, so the call ends with its own message rather than a resume attempt.
122
+ this.lifetimeTimer = RealtimeRelayTunnel.after(this.grant.ExpiresAtMs - this.openedAtMs, () => this.closeWith({ Code: REALTIME_RELAY_TIME_LIMIT_CLOSE_CODE, Reason: 'Call time limit reached' }, { Code: CLOSE_NORMAL, Reason: 'Relay session ended' }));
123
+ this.logOpened(this.grant, intent);
124
+ void this.openUpstream(this.grant);
125
+ }
126
+ /** The policy's reading of the first frame; a policy that throws opens nothing (only the error's name is logged). */
127
+ readIntent(text) {
128
+ try {
129
+ return this.policy.ReadOpenIntent(text);
130
+ }
131
+ catch (err) {
132
+ this.warn(`the policy could not read the first frame (${errorName(err)})`);
133
+ return null;
134
+ }
135
+ }
136
+ /** Opens the upstream with headers the policy mints now, under the upstream deadline. */
137
+ async openUpstream(grant) {
138
+ this.upstreamTimer = RealtimeRelayTunnel.after(this.limits.UpstreamOpenTimeoutMs, () => {
139
+ this.warn(`the upstream did not open within ${this.limits.UpstreamOpenTimeoutMs}ms`);
140
+ this.closeWith({ Code: CLOSE_BAD_GATEWAY, Reason: 'Upstream did not open in time' });
141
+ });
142
+ const headers = await this.fetchHeaders(grant);
143
+ if (this.closed || headers === null) {
144
+ return;
145
+ }
146
+ const upstream = this.connectUpstream(grant.UpstreamUrl, headers);
147
+ if (!upstream) {
148
+ return;
149
+ }
150
+ this.upstream = upstream;
151
+ upstream.on('open', () => this.onUpstreamOpen());
152
+ upstream.on('message', (data, isBinary) => this.onUpstreamMessage(data, isBinary));
153
+ upstream.on('pong', () => (this.unanswered.upstream = 0));
154
+ upstream.on('close', (code, reason) => this.onUpstreamClose(code, reason));
155
+ upstream.on('error', (err) => this.onUpstreamError(err));
156
+ }
157
+ /** Asks the policy for this connection's upstream headers; a failure closes the tunnel with 1011. */
158
+ async fetchHeaders(grant) {
159
+ try {
160
+ return await grant.Policy.UpstreamHeaders();
161
+ }
162
+ catch (err) {
163
+ this.warn(`the policy could not supply upstream headers (${errorSummary(err)})`);
164
+ this.closeWith({ Code: CLOSE_INTERNAL, Reason: 'Upstream credentials unavailable' });
165
+ return null;
166
+ }
167
+ }
168
+ /** Starts the upstream handshake; a refused URL closes the tunnel with 1014. */
169
+ connectUpstream(url, headers) {
170
+ try {
171
+ return new WsClient(url, { headers });
172
+ }
173
+ catch (err) {
174
+ // The constructor's message can quote the URL, and a URL can carry a key, so only the name is logged.
175
+ this.warn(`the upstream URL was refused (${errorName(err)})`);
176
+ this.closeWith({ Code: CLOSE_BAD_GATEWAY, Reason: 'Upstream unavailable' });
177
+ return null;
178
+ }
179
+ }
180
+ /** The upstream is open: the policy's opening frames go first, then what the browser sent meanwhile. */
181
+ onUpstreamOpen() {
182
+ if (this.closed || !this.intent) {
183
+ return;
184
+ }
185
+ RealtimeRelayTunnel.cancel(this.upstreamTimer);
186
+ this.upstreamTimer = null;
187
+ const opening = this.openingFrames(this.intent);
188
+ if (opening === null) {
189
+ return;
190
+ }
191
+ for (const frame of opening) {
192
+ this.sendUp(frame);
193
+ }
194
+ this.pendingBytes = 0;
195
+ for (const frame of this.pending.splice(0)) {
196
+ this.sendUp(frame);
197
+ }
198
+ }
199
+ /** The policy's opening frames; a policy that throws closes the tunnel with 1011. */
200
+ openingFrames(intent) {
201
+ try {
202
+ return this.policy.OpeningFrames(intent);
203
+ }
204
+ catch (err) {
205
+ this.warn(`the policy could not write the opening frames (${errorName(err)})`);
206
+ this.closeWith({ Code: CLOSE_INTERNAL, Reason: 'Relay could not open the session' });
207
+ return null;
208
+ }
209
+ }
210
+ // ── Pumping ─────────────────────────────────────────────────────────────────────────────────────
211
+ /** A client frame after the first: binary is dropped, text goes through the policy's filter. */
212
+ fromBrowser(data, isBinary) {
213
+ if (isBinary) {
214
+ this.countDrop('binary');
215
+ return;
216
+ }
217
+ const verdict = this.filter(bytesOf(data).toString('utf8'));
218
+ if ('Drop' in verdict) {
219
+ this.countDrop(verdict.Drop);
220
+ return;
221
+ }
222
+ if (this.upstream?.readyState === WsClient.OPEN) {
223
+ this.sendUp(verdict.Forward);
224
+ return;
225
+ }
226
+ this.hold(verdict.Forward);
227
+ }
228
+ /** The policy's verdict on a client frame; a policy that throws drops the frame. */
229
+ filter(text) {
230
+ try {
231
+ return this.policy.FilterClientFrame(text);
232
+ }
233
+ catch {
234
+ return { Drop: 'policy-error' };
235
+ }
236
+ }
237
+ /**
238
+ * Holds a frame until the upstream opens; past either cap (frames or bytes) the oldest go (stale audio is worthless
239
+ * anyway). A frame larger than the byte cap on its own is dropped.
240
+ */
241
+ hold(frame) {
242
+ this.pending.push(frame);
243
+ this.pendingBytes += Buffer.byteLength(frame);
244
+ while (this.pending.length > 0 &&
245
+ (this.pending.length > this.limits.MaxPendingFrames || this.pendingBytes > this.limits.MaxPendingBytes)) {
246
+ this.pendingBytes -= Buffer.byteLength(this.pending.shift());
247
+ this.countDrop('pre-open-overflow');
248
+ }
249
+ }
250
+ /**
251
+ * A server frame: a handle it carries is recorded before the frame goes to the browser, unchanged; then the browser
252
+ * leg's queue is checked against the cap.
253
+ */
254
+ onUpstreamMessage(data, isBinary) {
255
+ if (this.closed) {
256
+ return;
257
+ }
258
+ const bytes = bytesOf(data);
259
+ const handle = this.observe(bytes, isBinary);
260
+ if (handle) {
261
+ RealtimeProxyRegistry.Instance.RecordRelayHandle(this.sessionId, handle);
262
+ }
263
+ if (this.send(this.browser, bytes, isBinary)) {
264
+ this.traffic.FramesDown += 1;
265
+ this.traffic.BytesDown += bytes.length;
266
+ this.closeIfBrowserBehind();
267
+ }
268
+ }
269
+ /**
270
+ * A browser that cannot keep up (its queued bytes pass `MaxBrowserBufferedBytes` after a downstream send) is closed
271
+ * with 1013 and the upstream with 1001; the client resumes on a new connection.
272
+ */
273
+ closeIfBrowserBehind() {
274
+ const queued = this.browser.bufferedAmount;
275
+ if (queued <= this.limits.MaxBrowserBufferedBytes) {
276
+ return;
277
+ }
278
+ const t = this.traffic;
279
+ this.warn(`the browser leg has ${queued} B queued (cap ${this.limits.MaxBrowserBufferedBytes} B) after ` +
280
+ `${t.FramesDown} frames / ${t.BytesDown} B down; closing`);
281
+ this.closeWith({ Code: CLOSE_TRY_AGAIN, Reason: 'Relay buffer full' }, { Code: CLOSE_GOING_AWAY, Reason: 'Browser too slow' });
282
+ }
283
+ /** The resumption handle the policy finds in a server frame, if any; a policy that throws finds none. */
284
+ observe(bytes, isBinary) {
285
+ try {
286
+ const handle = this.policy.ObserveServerFrame(bytes, isBinary);
287
+ return typeof handle === 'string' && handle.length > 0 ? handle : null;
288
+ }
289
+ catch {
290
+ return null;
291
+ }
292
+ }
293
+ /** Sends one text frame upstream and counts it; then the upstream leg's queue is checked against the cap. */
294
+ sendUp(frame) {
295
+ if (this.send(this.upstream, frame, false)) {
296
+ this.traffic.FramesUp += 1;
297
+ this.traffic.BytesUp += Buffer.byteLength(frame);
298
+ this.closeIfUpstreamBehind();
299
+ }
300
+ }
301
+ /**
302
+ * An upstream that has stopped reading (its queued bytes pass `MaxUpstreamBufferedBytes` after an upstream send) is
303
+ * closed with 1001 and the browser with 1013, before the ping watchdog would notice; the client resumes on a new
304
+ * connection.
305
+ */
306
+ closeIfUpstreamBehind() {
307
+ const queued = this.upstream?.bufferedAmount ?? 0;
308
+ if (queued <= this.limits.MaxUpstreamBufferedBytes) {
309
+ return;
310
+ }
311
+ const t = this.traffic;
312
+ this.warn(`the upstream leg has ${queued} B queued (cap ${this.limits.MaxUpstreamBufferedBytes} B) after ` +
313
+ `${t.FramesUp} frames / ${t.BytesUp} B up; closing`);
314
+ this.closeWith({ Code: CLOSE_TRY_AGAIN, Reason: 'Relay buffer full' }, { Code: CLOSE_GOING_AWAY, Reason: 'Upstream too slow' });
315
+ }
316
+ /** Sends on a leg that is open, keeping text as text and binary as binary; a failed send closes the tunnel. */
317
+ send(target, data, isBinary) {
318
+ if (!target || target.readyState !== WsClient.OPEN) {
319
+ return false;
320
+ }
321
+ try {
322
+ target.send(data, { binary: isBinary });
323
+ return true;
324
+ }
325
+ catch {
326
+ this.closeWith({ Code: CLOSE_INTERNAL, Reason: 'Relay send failed' });
327
+ return false;
328
+ }
329
+ }
330
+ /**
331
+ * Pings each open leg, so idle timeouts on load balancers and ingresses do not close it. A leg that answered none of
332
+ * its last `MaxMissedPongs` pings is gone: it is terminated and the other leg closed.
333
+ */
334
+ pingBoth() {
335
+ for (const leg of RELAY_LEGS) {
336
+ const sock = leg === 'browser' ? this.browser : this.upstream;
337
+ if (this.closed || sock?.readyState !== WsClient.OPEN) {
338
+ continue;
339
+ }
340
+ if (this.unanswered[leg] >= this.limits.MaxMissedPongs) {
341
+ this.closeSilentLeg(leg);
342
+ return;
343
+ }
344
+ this.unanswered[leg] += 1;
345
+ try {
346
+ sock.ping();
347
+ }
348
+ catch {
349
+ /* closing */
350
+ }
351
+ }
352
+ }
353
+ /** A leg stopped answering pings: it is terminated, and the other leg closes (1001 upstream, 1014 to the browser). */
354
+ closeSilentLeg(leg) {
355
+ this.warn(`the ${leg} leg answered none of the last ${this.limits.MaxMissedPongs} pings; closing`);
356
+ if (leg === 'browser') {
357
+ this.closeWith({ Terminate: true }, { Code: CLOSE_GOING_AWAY, Reason: 'Browser stopped answering' });
358
+ return;
359
+ }
360
+ this.upstreamCloseNote = 'stopped answering pings';
361
+ this.closeWith({ Code: CLOSE_BAD_GATEWAY, Reason: 'Upstream stopped answering' }, { Terminate: true });
362
+ }
363
+ // ── Closing ─────────────────────────────────────────────────────────────────────────────────────
364
+ /** The upstream closed: the browser gets the same code and reason (1014 when the upstream sent none). */
365
+ onUpstreamClose(code, reason) {
366
+ this.upstreamCloseNote = reason.length > 0 ? `${code} (${safeText(reason)})` : String(code);
367
+ this.closeWith(passClose(code, reason, { Code: CLOSE_BAD_GATEWAY, Reason: 'Upstream connection lost' }));
368
+ }
369
+ /** The browser closed: the upstream gets the same code and reason (1001 when the browser sent none). */
370
+ onBrowserClose(code, reason) {
371
+ this.browserCloseCode = code;
372
+ this.closeWith(passClose(code, reason, { Code: CLOSE_GOING_AWAY, Reason: 'Browser connection lost' }));
373
+ }
374
+ /** The upstream failed (a refused handshake, a dropped socket): the browser gets 1014. */
375
+ onUpstreamError(err) {
376
+ if (this.closed) {
377
+ return;
378
+ }
379
+ this.upstreamCloseNote = 'error';
380
+ this.warn(`upstream error (${errorSummary(err)})`);
381
+ this.closeWith({ Code: CLOSE_BAD_GATEWAY, Reason: 'Upstream connection failed' });
382
+ }
383
+ /** The browser leg failed; `ws` has already closed it with the right code (1009 for an oversized frame). */
384
+ onBrowserError(err) {
385
+ if (this.closed) {
386
+ return;
387
+ }
388
+ this.warn(`browser leg error (${errorSummary(err)})`);
389
+ this.closeWith({ Code: CLOSE_GOING_AWAY, Reason: 'Browser connection lost' });
390
+ }
391
+ /**
392
+ * Closes both legs (the upstream with the browser's close unless it gets its own), stops the timers and reports to
393
+ * the server. Idempotent.
394
+ */
395
+ closeWith(browserClose, upstreamClose = browserClose) {
396
+ if (this.closed) {
397
+ return;
398
+ }
399
+ this.closed = true;
400
+ this.stopTimers();
401
+ this.pending.length = 0;
402
+ RealtimeRelayTunnel.closeLeg(this.browser, browserClose);
403
+ RealtimeRelayTunnel.closeLeg(this.upstream, upstreamClose);
404
+ if (this.grant) {
405
+ this.logClosed(this.grant);
406
+ }
407
+ this.host.OnClosed(this);
408
+ }
409
+ /** Closes one leg unless it is already closing; `Terminate`, or a handshake in progress, drops the socket. */
410
+ static closeLeg(sock, close) {
411
+ if (!sock || sock.readyState === WsClient.CLOSED) {
412
+ return;
413
+ }
414
+ if (close.Terminate || sock.readyState === WsClient.CONNECTING) {
415
+ RealtimeRelayTunnel.terminate(sock);
416
+ return;
417
+ }
418
+ if (sock.readyState === WsClient.CLOSING) {
419
+ return;
420
+ }
421
+ try {
422
+ sock.close(close.Code, close.Reason);
423
+ }
424
+ catch {
425
+ RealtimeRelayTunnel.terminate(sock);
426
+ }
427
+ }
428
+ static terminate(sock) {
429
+ try {
430
+ sock.terminate();
431
+ }
432
+ catch {
433
+ /* already gone */
434
+ }
435
+ }
436
+ /** Refuses the connection with 1008; the reason is logged, the browser only learns it was refused. */
437
+ refuse(reason) {
438
+ this.warn(`connection refused (${reason})`);
439
+ this.closeWith({ Code: CLOSE_POLICY, Reason: 'Relay session refused' });
440
+ }
441
+ // ── Timers and logs ─────────────────────────────────────────────────────────────────────────────
442
+ static after(ms, run) {
443
+ const timer = setTimeout(run, Math.max(0, Math.min(ms, MAX_TIMER_MS)));
444
+ timer.unref?.();
445
+ return timer;
446
+ }
447
+ static cancel(timer) {
448
+ if (timer) {
449
+ clearTimeout(timer);
450
+ }
451
+ }
452
+ stopTimers() {
453
+ RealtimeRelayTunnel.cancel(this.firstFrameTimer);
454
+ RealtimeRelayTunnel.cancel(this.upstreamTimer);
455
+ RealtimeRelayTunnel.cancel(this.lifetimeTimer);
456
+ if (this.pingTimer) {
457
+ clearInterval(this.pingTimer);
458
+ }
459
+ this.firstFrameTimer = this.upstreamTimer = this.lifetimeTimer = this.pingTimer = null;
460
+ }
461
+ /** Counts a dropped client frame under a sanitized label (the label is the policy's, never the payload). */
462
+ countDrop(label) {
463
+ const clean = dropLabel(label);
464
+ const key = this.drops.has(clean) || this.drops.size < MAX_DROP_LABELS ? clean : 'other';
465
+ const count = (this.drops.get(key) ?? 0) + 1;
466
+ this.drops.set(key, count);
467
+ if (key === 'pre-open-overflow' && count === 1) {
468
+ const l = this.limits;
469
+ this.warn(`the pre-open buffer is full (${l.MaxPendingFrames} frames or ${l.MaxPendingBytes} B); dropping the oldest`);
470
+ }
471
+ }
472
+ get label() {
473
+ return `relay ${RelayTicketPrefix(this.sessionId)}`;
474
+ }
475
+ warn(message) {
476
+ console.warn(`[RealtimeRelay] ${this.label}: ${message}`);
477
+ }
478
+ logOpened(grant, intent) {
479
+ const kind = grant.Resumed ? 'resume' : 'fresh';
480
+ const driver = grant.DriverClass ? ` for ${grant.DriverClass}` : '';
481
+ const audio = intent.AudioOnly ? '; audio only (the browser asked)' : '';
482
+ console.log(`[RealtimeRelay] ${this.label}: connection ${grant.ConnectionNumber} of ${grant.MaxConnections} opened (${kind})${driver}${audio}`);
483
+ }
484
+ logClosed(grant) {
485
+ const seconds = ((Date.now() - this.openedAtMs) / 1000).toFixed(1);
486
+ const t = this.traffic;
487
+ const drops = [...this.drops].map(([label, count]) => `${label}=${count}`).join(', ');
488
+ console.log(`[RealtimeRelay] ${this.label}: connection ${grant.ConnectionNumber} closed after ${seconds}s; ` +
489
+ `browser ${this.browserCloseCode ?? '-'}, upstream ${this.upstreamCloseNote || '-'}; ` +
490
+ `up ${t.FramesUp} frames / ${t.BytesUp} B, down ${t.FramesDown} frames / ${t.BytesDown} B` +
491
+ (drops ? `; dropped ${drops}` : ''));
492
+ }
493
+ }
494
+ /**
495
+ * The close to send on the other leg for a close received with `code`: the same code and reason when a close frame may
496
+ * carry the code, none for "no code" (1005), else `fallback` (1006 and 1015 mean the leg dropped without a close).
497
+ */
498
+ function passClose(code, reason, fallback) {
499
+ if (code === CLOSE_NO_STATUS) {
500
+ return {};
501
+ }
502
+ return isSendableCloseCode(code) ? { Code: code, Reason: reason } : fallback;
503
+ }
504
+ /** Whether a close frame may carry `code` (the codes `ws` sends). */
505
+ function isSendableCloseCode(code) {
506
+ return (code >= 1000 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006) || (code >= 3000 && code <= 4999);
507
+ }
508
+ /** The bytes of a received message (`ws` hands over a Buffer, an ArrayBuffer, or fragments). */
509
+ function bytesOf(data) {
510
+ if (Buffer.isBuffer(data)) {
511
+ return data;
512
+ }
513
+ return Array.isArray(data) ? Buffer.concat(data) : Buffer.from(data);
514
+ }
515
+ /** A drop label safe to count and log: letters, digits, `_`, `.`, `-`, at most 40 characters. */
516
+ function dropLabel(label) {
517
+ const clean = String(label).replace(/[^A-Za-z0-9_.-]/g, '').slice(0, 40);
518
+ return clean.length > 0 ? clean : 'unlabelled';
519
+ }
520
+ /** An upstream close reason fit for a log line: printable characters only. */
521
+ function safeText(reason) {
522
+ return reason.toString('utf8').replace(/[^\x20-\x7E]/g, '?').slice(0, 123);
523
+ }
524
+ /** An error's name only (for errors whose message could quote a payload or a URL). */
525
+ function errorName(err) {
526
+ return err instanceof Error ? err.name : 'error';
527
+ }
528
+ /** An error's message, shortened, for errors that carry no payload (credentials, sockets). */
529
+ function errorSummary(err) {
530
+ return err instanceof Error ? err.message.slice(0, 160) : 'unknown error';
531
+ }
532
+ //# sourceMappingURL=RealtimeRelayTunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeRelayTunnel.js","sourceRoot":"","sources":["../../src/realtimeProxy/RealtimeRelayTunnel.ts"],"names":[],"mappings":"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"}