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

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 (346) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
  3. package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
  4. package/dist/agentSessions/BridgeHostInstance.js +30 -0
  5. package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
  6. package/dist/agentSessions/HostInstance.d.ts +75 -11
  7. package/dist/agentSessions/HostInstance.d.ts.map +1 -1
  8. package/dist/agentSessions/HostInstance.js +99 -28
  9. package/dist/agentSessions/HostInstance.js.map +1 -1
  10. package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
  11. package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
  12. package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
  13. package/dist/agentSessions/SessionJanitor.d.ts +173 -25
  14. package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
  15. package/dist/agentSessions/SessionJanitor.js +452 -54
  16. package/dist/agentSessions/SessionJanitor.js.map +1 -1
  17. package/dist/agentSessions/SessionManager.d.ts +43 -2
  18. package/dist/agentSessions/SessionManager.d.ts.map +1 -1
  19. package/dist/agentSessions/SessionManager.js +99 -8
  20. package/dist/agentSessions/SessionManager.js.map +1 -1
  21. package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
  22. package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
  23. package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
  24. package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
  25. package/dist/agentSessions/index.d.ts +2 -0
  26. package/dist/agentSessions/index.d.ts.map +1 -1
  27. package/dist/agentSessions/index.js +10 -3
  28. package/dist/agentSessions/index.js.map +1 -1
  29. package/dist/auth/actionAuthorization.d.ts +40 -0
  30. package/dist/auth/actionAuthorization.d.ts.map +1 -0
  31. package/dist/auth/actionAuthorization.js +94 -0
  32. package/dist/auth/actionAuthorization.js.map +1 -0
  33. package/dist/auth/index.d.ts.map +1 -1
  34. package/dist/auth/index.js +3 -10
  35. package/dist/auth/index.js.map +1 -1
  36. package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
  37. package/dist/auth/magicLink/MagicLinkService.js +6 -3
  38. package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
  39. package/dist/auth/newUsers.d.ts +10 -0
  40. package/dist/auth/newUsers.d.ts.map +1 -1
  41. package/dist/auth/newUsers.js +80 -11
  42. package/dist/auth/newUsers.js.map +1 -1
  43. package/dist/config.d.ts +2378 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +123 -0
  46. package/dist/config.js.map +1 -1
  47. package/dist/context.d.ts +8 -0
  48. package/dist/context.d.ts.map +1 -1
  49. package/dist/context.js +14 -11
  50. package/dist/context.js.map +1 -1
  51. package/dist/generated/graphql-schemas/__mj.d.ts +135 -0
  52. package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
  53. package/dist/generated/graphql-schemas/__mj.js +706 -0
  54. package/dist/generated/graphql-schemas/__mj.js.map +1 -1
  55. package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
  56. package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
  57. package/dist/generic/ResolverBase.d.ts +20 -4
  58. package/dist/generic/ResolverBase.d.ts.map +1 -1
  59. package/dist/generic/ResolverBase.js +39 -10
  60. package/dist/generic/ResolverBase.js.map +1 -1
  61. package/dist/generic/RunViewResolver.d.ts.map +1 -1
  62. package/dist/generic/RunViewResolver.js +4 -0
  63. package/dist/generic/RunViewResolver.js.map +1 -1
  64. package/dist/index.d.ts +6 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +120 -131
  67. package/dist/index.js.map +1 -1
  68. package/dist/isolatedProvider.d.ts +20 -0
  69. package/dist/isolatedProvider.d.ts.map +1 -0
  70. package/dist/isolatedProvider.js +22 -0
  71. package/dist/isolatedProvider.js.map +1 -0
  72. package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
  73. package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
  74. package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
  75. package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
  76. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
  77. package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
  78. package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
  79. package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
  80. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
  81. package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
  82. package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
  83. package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
  84. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
  85. package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
  86. package/dist/realtimeSessions/RealtimeSessionVerificationService.js +138 -0
  87. package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
  88. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
  89. package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
  90. package/dist/realtimeSessions/RealtimeVerifyRouter.js +98 -0
  91. package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
  92. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
  93. package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
  94. package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
  95. package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
  96. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
  97. package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
  98. package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
  99. package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
  100. package/dist/realtimeSessions/index.d.ts +17 -0
  101. package/dist/realtimeSessions/index.d.ts.map +1 -0
  102. package/dist/realtimeSessions/index.js +17 -0
  103. package/dist/realtimeSessions/index.js.map +1 -0
  104. package/dist/realtimeSessions/sessionAccess.d.ts +86 -0
  105. package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
  106. package/dist/realtimeSessions/sessionAccess.js +90 -0
  107. package/dist/realtimeSessions/sessionAccess.js.map +1 -0
  108. package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
  109. package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
  110. package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
  111. package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
  112. package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
  113. package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
  114. package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
  115. package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
  116. package/dist/realtimeSessions/verificationCore.d.ts +243 -0
  117. package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
  118. package/dist/realtimeSessions/verificationCore.js +356 -0
  119. package/dist/realtimeSessions/verificationCore.js.map +1 -0
  120. package/dist/realtimeSessions/verificationPages.d.ts +66 -0
  121. package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
  122. package/dist/realtimeSessions/verificationPages.js +110 -0
  123. package/dist/realtimeSessions/verificationPages.js.map +1 -0
  124. package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
  125. package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
  126. package/dist/realtimeSessions/verificationPolicy.js +249 -0
  127. package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
  128. package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
  129. package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
  130. package/dist/realtimeSessions/verificationWorkflow.js +435 -0
  131. package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
  132. package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
  133. package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
  134. package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
  135. package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
  136. package/dist/resolvers/ActionResolver.d.ts +31 -5
  137. package/dist/resolvers/ActionResolver.d.ts.map +1 -1
  138. package/dist/resolvers/ActionResolver.js +75 -14
  139. package/dist/resolvers/ActionResolver.js.map +1 -1
  140. package/dist/resolvers/AdhocQueryResolver.d.ts +14 -1
  141. package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
  142. package/dist/resolvers/AdhocQueryResolver.js +21 -5
  143. package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
  144. package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
  145. package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
  146. package/dist/resolvers/CacheStatsResolver.js +113 -2
  147. package/dist/resolvers/CacheStatsResolver.js.map +1 -1
  148. package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
  149. package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
  150. package/dist/resolvers/ClientToolRequestResolver.js +28 -10
  151. package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
  152. package/dist/resolvers/FetchEntityVectorsResolver.d.ts +12 -1
  153. package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
  154. package/dist/resolvers/FetchEntityVectorsResolver.js +83 -2
  155. package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
  156. package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -1
  157. package/dist/resolvers/HumanHandoffResolver.js +7 -1
  158. package/dist/resolvers/HumanHandoffResolver.js.map +1 -1
  159. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  160. package/dist/resolvers/MCPResolver.js +9 -4
  161. package/dist/resolvers/MCPResolver.js.map +1 -1
  162. package/dist/resolvers/RealtimeBridgeResolver.d.ts +54 -2
  163. package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
  164. package/dist/resolvers/RealtimeBridgeResolver.js +155 -10
  165. package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
  166. package/dist/resolvers/RealtimeClientSessionResolver.d.ts +155 -25
  167. package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
  168. package/dist/resolvers/RealtimeClientSessionResolver.js +394 -90
  169. package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
  170. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
  171. package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
  172. package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
  173. package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
  174. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
  175. package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
  176. package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
  177. package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
  178. package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
  179. package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
  180. package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
  181. package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
  182. package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
  183. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  184. package/dist/resolvers/RunAIAgentResolver.js +68 -11
  185. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  186. package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
  187. package/dist/resolvers/RunTemplateResolver.js +12 -11
  188. package/dist/resolvers/RunTemplateResolver.js.map +1 -1
  189. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  190. package/dist/resolvers/SyncDataResolver.js +6 -2
  191. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  192. package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
  193. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  194. package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
  195. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  196. package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
  197. package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
  198. package/dist/resolvers/UserAvatarResolver.js +124 -0
  199. package/dist/resolvers/UserAvatarResolver.js.map +1 -0
  200. package/dist/resolvers/UserResolver.d.ts.map +1 -1
  201. package/dist/resolvers/UserResolver.js +2 -17
  202. package/dist/resolvers/UserResolver.js.map +1 -1
  203. package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
  204. package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
  205. package/dist/resolvers/agentVisionConsentAudit.js +63 -0
  206. package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
  207. package/dist/resolvers/avatarInputValidation.d.ts +40 -0
  208. package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
  209. package/dist/resolvers/avatarInputValidation.js +97 -0
  210. package/dist/resolvers/avatarInputValidation.js.map +1 -0
  211. package/dist/resolvers/currentUserRoles.d.ts +29 -0
  212. package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
  213. package/dist/resolvers/currentUserRoles.js +30 -0
  214. package/dist/resolvers/currentUserRoles.js.map +1 -1
  215. package/dist/resolvers/meetings/meetingMutations.d.ts +6 -0
  216. package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
  217. package/dist/resolvers/meetings/meetingMutations.js +21 -0
  218. package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
  219. package/dist/services/TaskGraphContinuationDeliverer.d.ts +4 -3
  220. package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
  221. package/dist/services/TaskGraphContinuationDeliverer.js +13 -7
  222. package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
  223. package/dist/sharedCache.d.ts +105 -0
  224. package/dist/sharedCache.d.ts.map +1 -0
  225. package/dist/sharedCache.js +276 -0
  226. package/dist/sharedCache.js.map +1 -0
  227. package/dist/types.d.ts +6 -0
  228. package/dist/types.d.ts.map +1 -1
  229. package/dist/types.js.map +1 -1
  230. package/package.json +97 -95
  231. package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
  232. package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
  233. package/src/__tests__/BridgeHostInstance.test.ts +232 -0
  234. package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
  235. package/src/__tests__/FetchEntityVectorsResolver.test.ts +285 -0
  236. package/src/__tests__/HostInstance.test.ts +84 -0
  237. package/src/__tests__/HumanHandoffResolver.test.ts +17 -0
  238. package/src/__tests__/MeetingResolver.test.ts +75 -1
  239. package/src/__tests__/RealtimeBridgeResolver.test.ts +415 -6
  240. package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
  241. package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
  242. package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
  243. package/src/__tests__/RealtimeRelay.test.ts +876 -0
  244. package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
  245. package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
  246. package/src/__tests__/ResolverBase.clientOldValues.test.ts +6 -3
  247. package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
  248. package/src/__tests__/RunAIAgentResolver.branch.test.ts +169 -0
  249. package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +4 -4
  250. package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
  251. package/src/__tests__/RunTemplateResolver.test.ts +132 -0
  252. package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
  253. package/src/__tests__/SessionJanitor.test.ts +845 -18
  254. package/src/__tests__/SessionManager.test.ts +213 -17
  255. package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
  256. package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
  257. package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +50 -3
  258. package/src/__tests__/UserAvatarResolver.test.ts +255 -0
  259. package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
  260. package/src/__tests__/actionAuthorization.test.ts +130 -0
  261. package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
  262. package/src/__tests__/avatarInputValidation.test.ts +160 -0
  263. package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
  264. package/src/__tests__/magicLinkService.consume.test.ts +6 -0
  265. package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
  266. package/src/__tests__/newUsers.template.test.ts +151 -0
  267. package/src/__tests__/newUsers.test.ts +74 -5
  268. package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
  269. package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
  270. package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
  271. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
  272. package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
  273. package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
  274. package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
  275. package/src/__tests__/realtimeSessions/helpers.ts +4 -0
  276. package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
  277. package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
  278. package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
  279. package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
  280. package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
  281. package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
  282. package/src/__tests__/resolverBase.fls.test.ts +87 -4
  283. package/src/__tests__/serverExtensionReservedRoots.test.ts +2 -0
  284. package/src/__tests__/sharedCache.test.ts +310 -0
  285. package/src/__tests__/widgetGuestElevation.test.ts +44 -0
  286. package/src/agentSessions/BridgeHostInstance.ts +32 -0
  287. package/src/agentSessions/HostInstance.ts +124 -28
  288. package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
  289. package/src/agentSessions/SessionJanitor.ts +543 -57
  290. package/src/agentSessions/SessionManager.ts +125 -25
  291. package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
  292. package/src/agentSessions/index.ts +10 -3
  293. package/src/auth/actionAuthorization.ts +116 -0
  294. package/src/auth/index.ts +3 -8
  295. package/src/auth/magicLink/MagicLinkService.ts +6 -3
  296. package/src/auth/newUsers.ts +99 -11
  297. package/src/config.ts +125 -0
  298. package/src/context.ts +15 -10
  299. package/src/generated/graphql-schemas/__mj.ts +496 -1
  300. package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
  301. package/src/generic/ResolverBase.ts +39 -9
  302. package/src/generic/RunViewResolver.ts +4 -0
  303. package/src/index.ts +132 -143
  304. package/src/isolatedProvider.ts +22 -0
  305. package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
  306. package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
  307. package/src/realtimeSessions/README.md +179 -0
  308. package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
  309. package/src/realtimeSessions/RealtimeSessionVerificationService.ts +167 -0
  310. package/src/realtimeSessions/RealtimeVerifyRouter.ts +108 -0
  311. package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
  312. package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
  313. package/src/realtimeSessions/index.ts +16 -0
  314. package/src/realtimeSessions/sessionAccess.ts +141 -0
  315. package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
  316. package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
  317. package/src/realtimeSessions/verificationCore.ts +502 -0
  318. package/src/realtimeSessions/verificationPages.ts +149 -0
  319. package/src/realtimeSessions/verificationPolicy.ts +321 -0
  320. package/src/realtimeSessions/verificationWorkflow.ts +702 -0
  321. package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
  322. package/src/resolvers/ActionResolver.ts +84 -21
  323. package/src/resolvers/AdhocQueryResolver.ts +24 -6
  324. package/src/resolvers/CacheStatsResolver.ts +89 -2
  325. package/src/resolvers/ClientToolRequestResolver.ts +25 -7
  326. package/src/resolvers/FetchEntityVectorsResolver.ts +97 -2
  327. package/src/resolvers/HumanHandoffResolver.ts +8 -0
  328. package/src/resolvers/MCPResolver.ts +8 -5
  329. package/src/resolvers/RealtimeBridgeResolver.ts +163 -11
  330. package/src/resolvers/RealtimeClientSessionResolver.ts +501 -96
  331. package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
  332. package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
  333. package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
  334. package/src/resolvers/RunAIAgentResolver.ts +78 -11
  335. package/src/resolvers/RunTemplateResolver.ts +13 -12
  336. package/src/resolvers/SyncDataResolver.ts +6 -2
  337. package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
  338. package/src/resolvers/UserAvatarResolver.ts +111 -0
  339. package/src/resolvers/UserResolver.ts +2 -16
  340. package/src/resolvers/agentVisionConsentAudit.ts +82 -0
  341. package/src/resolvers/avatarInputValidation.ts +123 -0
  342. package/src/resolvers/currentUserRoles.ts +32 -1
  343. package/src/resolvers/meetings/meetingMutations.ts +21 -0
  344. package/src/services/TaskGraphContinuationDeliverer.ts +13 -7
  345. package/src/sharedCache.ts +302 -0
  346. package/src/types.ts +7 -0
@@ -1,6 +1,11 @@
1
1
  import { WebSocket as WsClient, WebSocketServer } from 'ws';
2
2
  import { BaseSingleton, ShutdownRegistry } from '@memberjunction/global';
3
- import { RealtimeProxyRegistry, REALTIME_PROXY_PATH } from '@memberjunction/ai';
3
+ import { RealtimeProxyRegistry, REALTIME_PROXY_PATH, REALTIME_RELAY_PATH, } from '@memberjunction/ai';
4
+ import { RealtimeRelayTunnel, RelayTicketPrefix, REALTIME_RELAY_LIMITS, REALTIME_RELAY_MAX_CLIENT_FRAME_BYTES, } from './RealtimeRelayTunnel.js';
5
+ /** The optional Origin allowlist both paths apply: comma-separated origins. */
6
+ const ALLOWED_ORIGINS_ENV = 'MJ_REALTIME_PROXY_ALLOWED_ORIGINS';
7
+ /** The longest part of a refused Origin header a log line quotes. */
8
+ const MAX_LOGGED_ORIGIN_CHARS = 200;
4
9
  /**
5
10
  * MJAPI's realtime websocket **proxy** — the transport half of the self-hosted realtime provider story.
6
11
  *
@@ -15,6 +20,11 @@ import { RealtimeProxyRegistry, REALTIME_PROXY_PATH } from '@memberjunction/ai';
15
20
  * wire vocabulary) and knows nothing about any specific provider — it is a pure authenticated byte tunnel,
16
21
  * reusable by any future self-hosted realtime provider that mints a ticket.
17
22
  *
23
+ * It also serves the realtime **relay** at `{REALTIME_RELAY_PATH}/<ticket>/…` (any suffix: a provider's
24
+ * browser SDK appends its own path): one ticket per realtime session, a frame policy from the provider driver
25
+ * between the legs (see {@link RealtimeRelayTunnel}), one live upstream per session (a resume replaces the
26
+ * older connection). The Origin allowlist applies to both paths.
27
+ *
18
28
  * A {@link BaseSingleton} + {@link IShutdownable}: it tracks live tunnels and closes them on graceful
19
29
  * shutdown (drained by MJServer's `ShutdownRegistry` before `httpServer.close()`).
20
30
  */
@@ -24,40 +34,118 @@ export class RealtimeProxyServer extends BaseSingleton {
24
34
  this.ShutdownName = 'RealtimeProxyServer';
25
35
  /** `noServer` so THIS server never binds its own upgrade listener — MJServer routes upgrades to it by path. */
26
36
  this.wss = new WebSocketServer({ noServer: true });
37
+ /** The relay's upgrade server: the same routing, plus the client frame cap, enforced while a frame is read. */
38
+ this.relayWss = new WebSocketServer({ noServer: true, maxPayload: REALTIME_RELAY_MAX_CLIENT_FRAME_BYTES });
27
39
  /** Live browser↔upstream tunnels, tracked for shutdown teardown. */
28
40
  this.tunnels = new Set();
41
+ /** Live relay connections, tracked for shutdown teardown. */
42
+ this.relays = new Set();
43
+ /** The granted connection each relay session uses now: one live upstream per session. */
44
+ this.liveRelays = new Map();
45
+ this.relayHost = {
46
+ OnGranted: (tunnel) => this.relayGranted(tunnel),
47
+ OnClosed: (tunnel) => this.relayClosed(tunnel),
48
+ };
29
49
  this.registered = false;
30
50
  }
31
51
  /** Process-wide singleton accessor. */
32
52
  static get Instance() {
33
53
  return super.getInstance();
34
54
  }
55
+ /** The relay's deadlines, ping interval and pre-open buffer ({@link REALTIME_RELAY_LIMITS}); a subclass may tune them. */
56
+ get RelayLimits() {
57
+ return REALTIME_RELAY_LIMITS;
58
+ }
35
59
  /**
36
- * Routes an HTTP `upgrade` for {@link REALTIME_PROXY_PATH} to the proxy. Returns `true` when it OWNS
37
- * (handled/rejected) the request, `false` when the path is not the proxy's — so the caller leaves the
38
- * socket for the GraphQL websocket server's own upgrade listener. NEVER destroys a socket it doesn't own.
60
+ * Routes an HTTP `upgrade` for {@link REALTIME_PROXY_PATH} (ticket in the query) or {@link REALTIME_RELAY_PATH}
61
+ * (ticket in the path, any suffix). Returns `true` when it OWNS (handled/rejected) the request, `false` when
62
+ * the path is neither — so the caller leaves the socket for the GraphQL websocket server's own upgrade
63
+ * listener. NEVER destroys a socket it doesn't own.
39
64
  */
40
65
  TryHandleUpgrade(request, socket, head) {
41
66
  const url = RealtimeProxyServer.parseUrl(request.url);
42
- if (!url || url.pathname !== REALTIME_PROXY_PATH) {
43
- return false; // not ours — leave it for the GraphQL WS server
67
+ if (url?.pathname === REALTIME_PROXY_PATH) {
68
+ this.handleProxyUpgrade(request, socket, head, url);
69
+ return true;
44
70
  }
71
+ if (url && RealtimeProxyServer.isRelayPath(url.pathname)) {
72
+ this.handleRelayUpgrade(request, socket, head, url.pathname);
73
+ return true;
74
+ }
75
+ return false; // not ours — leave it for the GraphQL WS server
76
+ }
77
+ /** `/realtime-proxy?ticket=<id>`: consumes the single-use ticket and opens a byte tunnel. */
78
+ handleProxyUpgrade(request, socket, head, url) {
45
79
  this.ensureRegistered();
46
80
  // Optional Origin allowlist (MJ_REALTIME_PROXY_ALLOWED_ORIGINS: comma-separated origins).
47
81
  // Unset ⇒ prior behavior (the single-use short-TTL ticket remains the primary guard);
48
82
  // set ⇒ a browser page on a foreign origin cannot ride a leaked ticket id.
49
83
  if (!RealtimeProxyServer.originAllowed(request.headers?.origin)) {
50
- RealtimeProxyServer.rejectUpgrade(socket, 403, 'Forbidden');
51
- return true;
84
+ RealtimeProxyServer.refuseOrigin(socket, '[RealtimeProxy]', request.headers?.origin);
85
+ return;
52
86
  }
53
87
  const ticketId = url.searchParams.get('ticket') ?? '';
54
88
  const entry = RealtimeProxyRegistry.Instance.Consume(ticketId);
55
89
  if (!entry) {
56
90
  RealtimeProxyServer.rejectUpgrade(socket, 401, 'Unauthorized');
57
- return true;
91
+ return;
58
92
  }
59
93
  this.wss.handleUpgrade(request, socket, head, (browserWs) => this.openTunnel(browserWs, entry));
60
- return true;
94
+ }
95
+ /**
96
+ * `/realtime/relay/<ticket>/…`: the same Origin allowlist (403, logged with the origin), then 401 unless the relay
97
+ * session can still take a connection. Whether it opens fresh or resumes is decided on the connection's first frame.
98
+ * A query string is ignored: the ticket is read from the path only.
99
+ */
100
+ handleRelayUpgrade(request, socket, head, pathname) {
101
+ this.ensureRegistered();
102
+ if (!RealtimeProxyServer.originAllowed(request.headers?.origin)) {
103
+ RealtimeProxyServer.refuseOrigin(socket, '[RealtimeRelay]', request.headers?.origin);
104
+ return;
105
+ }
106
+ const sessionId = RealtimeProxyServer.relayTicketFrom(pathname);
107
+ const session = sessionId ? RealtimeProxyRegistry.Instance.FindRelaySession(sessionId) : null;
108
+ if (!session) {
109
+ console.warn(`[RealtimeRelay] relay ${RelayTicketPrefix(sessionId)}: upgrade refused (unknown, ended or used up)`);
110
+ RealtimeProxyServer.rejectUpgrade(socket, 401, 'Unauthorized');
111
+ return;
112
+ }
113
+ this.relayWss.handleUpgrade(request, socket, head, (browserWs) => this.openRelay(browserWs, sessionId, session.Policy));
114
+ }
115
+ /** Whether a path is the relay's: `/realtime/relay` itself or anything below it. */
116
+ static isRelayPath(pathname) {
117
+ return pathname === REALTIME_RELAY_PATH || pathname.startsWith(`${REALTIME_RELAY_PATH}/`);
118
+ }
119
+ /** The ticket id in a relay path: the segment right after `/realtime/relay/`; whatever follows is the SDK's. */
120
+ static relayTicketFrom(pathname) {
121
+ const segment = pathname.slice(REALTIME_RELAY_PATH.length + 1).split('/')[0] ?? '';
122
+ try {
123
+ return decodeURIComponent(segment);
124
+ }
125
+ catch {
126
+ return ''; // malformed escape — no ticket
127
+ }
128
+ }
129
+ /** Starts one relay connection; the session's policy reads its first frame. */
130
+ openRelay(browserWs, sessionId, policy) {
131
+ const tunnel = new RealtimeRelayTunnel(browserWs, sessionId, policy, this.RelayLimits, this.relayHost);
132
+ this.relays.add(tunnel);
133
+ tunnel.Start();
134
+ }
135
+ /** A relay connection was granted: it becomes the session's live one, and the older one closes. */
136
+ relayGranted(tunnel) {
137
+ const previous = this.liveRelays.get(tunnel.SessionID);
138
+ this.liveRelays.set(tunnel.SessionID, tunnel);
139
+ if (previous && previous !== tunnel) {
140
+ previous.Close(1000, 'Replaced by a resumed connection');
141
+ }
142
+ }
143
+ /** A relay connection closed: forget it, and the session's live slot when it held it. */
144
+ relayClosed(tunnel) {
145
+ this.relays.delete(tunnel);
146
+ if (this.liveRelays.get(tunnel.SessionID) === tunnel) {
147
+ this.liveRelays.delete(tunnel.SessionID);
148
+ }
61
149
  }
62
150
  /**
63
151
  * Evaluates the optional Origin allowlist. Comparison is exact on the normalized origin
@@ -69,7 +157,7 @@ export class RealtimeProxyServer extends BaseSingleton {
69
157
  * @returns True when allowed (or no allowlist is configured).
70
158
  */
71
159
  static originAllowed(origin) {
72
- const raw = process.env['MJ_REALTIME_PROXY_ALLOWED_ORIGINS'];
160
+ const raw = process.env[ALLOWED_ORIGINS_ENV];
73
161
  if (!raw || raw.trim().length === 0) {
74
162
  return true; // no allowlist configured — prior behavior
75
163
  }
@@ -93,17 +181,24 @@ export class RealtimeProxyServer extends BaseSingleton {
93
181
  this.registered = true;
94
182
  }
95
183
  }
96
- /** Closes every live tunnel and the proxy server. Idempotent; never throws. */
184
+ /** Closes every live tunnel and relay connection (1001), and both upgrade servers. Idempotent; never throws. */
97
185
  Shutdown() {
98
186
  for (const tunnel of [...this.tunnels]) {
99
187
  tunnel.Close();
100
188
  }
101
189
  this.tunnels.clear();
102
- try {
103
- this.wss.close();
190
+ for (const relay of [...this.relays]) {
191
+ relay.Close(1001, 'Server shutting down');
104
192
  }
105
- catch {
106
- /* already closing */
193
+ this.relays.clear();
194
+ this.liveRelays.clear();
195
+ for (const server of [this.wss, this.relayWss]) {
196
+ try {
197
+ server.close();
198
+ }
199
+ catch {
200
+ /* already closing */
201
+ }
107
202
  }
108
203
  }
109
204
  /** Parses `request.url` (a path+query) into a URL, or `null` when absent/unparseable. */
@@ -118,6 +213,16 @@ export class RealtimeProxyServer extends BaseSingleton {
118
213
  return null;
119
214
  }
120
215
  }
216
+ /**
217
+ * Refuses an upgrade whose Origin is not on the allowlist: 403, and one log line naming the origin (printable
218
+ * characters only, shortened), so a browser page on an origin the allowlist lacks shows in MJAPI's log. The line
219
+ * never quotes the request's path or query: they carry the ticket.
220
+ */
221
+ static refuseOrigin(socket, logPrefix, origin) {
222
+ const shown = (origin ?? '').replace(/[^\x20-\x7E]/g, '?').slice(0, MAX_LOGGED_ORIGIN_CHARS);
223
+ console.warn(`${logPrefix} upgrade refused (403): origin "${shown}" is not in ${ALLOWED_ORIGINS_ENV}`);
224
+ RealtimeProxyServer.rejectUpgrade(socket, 403, 'Forbidden');
225
+ }
121
226
  /** Writes a minimal HTTP error response and destroys the socket (used for a rejected upgrade). */
122
227
  static rejectUpgrade(socket, code, reason) {
123
228
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"RealtimeProxyServer.js","sourceRoot":"","sources":["../../src/realtimeProxy/RealtimeProxyServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealtimeProxyServer.js","sourceRoot":"","sources":["../../src/realtimeProxy/RealtimeProxyServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { WebSocket as WsClient } from 'ws';
2
+ import { type IRealtimeRelayPolicy } from '@memberjunction/ai';
3
+ /** The relay's deadlines, pings, buffers and caps. */
4
+ export interface RealtimeRelayLimits {
5
+ /** How long the browser has to send its first frame after the upgrade, in ms. */
6
+ FirstFrameTimeoutMs: number;
7
+ /** How long the upstream has to open, from the header fetch to the end of its handshake, in ms. */
8
+ UpstreamOpenTimeoutMs: number;
9
+ /** How often the relay pings each leg, in ms. */
10
+ PingIntervalMs: number;
11
+ /**
12
+ * Pings a leg may leave unanswered in a row. At the next ping a leg that answered none of them is terminated and the
13
+ * other leg is closed (any pong resets the count).
14
+ */
15
+ MaxMissedPongs: number;
16
+ /** Client frames held while the upstream opens; past this the oldest are dropped. */
17
+ MaxPendingFrames: number;
18
+ /** Bytes of client frames held while the upstream opens; past this the oldest are dropped. */
19
+ MaxPendingBytes: number;
20
+ /**
21
+ * Bytes the browser leg may have queued after a downstream send. Past this the browser cannot keep up: the tunnel
22
+ * closes (1013 to the browser, 1001 upstream) and the client resumes on a new connection.
23
+ */
24
+ MaxBrowserBufferedBytes: number;
25
+ /**
26
+ * Bytes the upstream leg may have queued after an upstream send. Past this the provider has stopped reading: the
27
+ * tunnel closes (1013 to the browser, 1001 upstream) and the client resumes on a new connection.
28
+ */
29
+ MaxUpstreamBufferedBytes: number;
30
+ }
31
+ /** The limits MJAPI runs the relay with. */
32
+ export declare const REALTIME_RELAY_LIMITS: Readonly<RealtimeRelayLimits>;
33
+ /**
34
+ * The largest client message the relay accepts (2 MiB). The relay's websocket server enforces it while reading, so a
35
+ * larger message closes the browser leg with 1009 before it is buffered.
36
+ */
37
+ export declare const REALTIME_RELAY_MAX_CLIENT_FRAME_BYTES: number;
38
+ /** How a relay tunnel reports to the server that owns it. */
39
+ export interface RealtimeRelayTunnelHost {
40
+ /** The session granted this connection: the server makes it the session's live one and closes the older one. */
41
+ OnGranted(tunnel: RealtimeRelayTunnel): void;
42
+ /** The tunnel closed; called once. */
43
+ OnClosed(tunnel: RealtimeRelayTunnel): void;
44
+ }
45
+ /** The first 8 characters of a ticket id, safe to log (never the whole id). */
46
+ export declare function RelayTicketPrefix(id: string): string;
47
+ /**
48
+ * One browser connection through MJAPI's realtime relay (`/realtime/relay/<ticket>/…`).
49
+ *
50
+ * It waits for the browser's first frame, asks the session's policy what that frame opens, and lets the registry
51
+ * decide (one fresh connection, then resumes with a forwarded handle). Then it opens the upstream with headers the
52
+ * policy mints for this connection, sends the policy's opening frames before anything else, and pumps both ways: client
53
+ * frames through the policy's filter (text only; binary client frames are dropped), server frames unchanged once the
54
+ * policy has looked for a resumption handle. It pings both legs and terminates one that stops answering, closes a
55
+ * 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
56
+ * carry counts, sizes, codes and an 8-character ticket prefix, never payloads, headers or tokens.
57
+ */
58
+ export declare class RealtimeRelayTunnel {
59
+ private readonly browser;
60
+ private readonly sessionId;
61
+ private readonly policy;
62
+ private readonly limits;
63
+ private readonly host;
64
+ private upstream;
65
+ private grant;
66
+ private intent;
67
+ /** Client frames that passed the filter before the upstream opened, in arrival order. */
68
+ private readonly pending;
69
+ private pendingBytes;
70
+ /** Dropped client frames per type label. */
71
+ private readonly drops;
72
+ private readonly traffic;
73
+ /** Pings each leg has left unanswered since its last pong. */
74
+ private readonly unanswered;
75
+ private firstFrameTimer;
76
+ private upstreamTimer;
77
+ private lifetimeTimer;
78
+ private pingTimer;
79
+ private openedAtMs;
80
+ private browserCloseCode;
81
+ private upstreamCloseNote;
82
+ private closed;
83
+ constructor(browser: WsClient, sessionId: string, policy: IRealtimeRelayPolicy, limits: RealtimeRelayLimits, host: RealtimeRelayTunnelHost);
84
+ /** The relay session this connection belongs to. */
85
+ get SessionID(): string;
86
+ /** Starts the first-frame deadline and the pings, and listens to the browser leg. */
87
+ Start(): void;
88
+ /** Closes both legs with `code` and `reason` (no code: a close frame without one). Idempotent. */
89
+ Close(code?: number, reason?: string): void;
90
+ private onBrowserMessage;
91
+ /** Reads the first frame's intent, asks the registry, and opens the upstream when the connection is granted. */
92
+ private openFromFirstFrame;
93
+ /** The policy's reading of the first frame; a policy that throws opens nothing (only the error's name is logged). */
94
+ private readIntent;
95
+ /** Opens the upstream with headers the policy mints now, under the upstream deadline. */
96
+ private openUpstream;
97
+ /** Asks the policy for this connection's upstream headers; a failure closes the tunnel with 1011. */
98
+ private fetchHeaders;
99
+ /** Starts the upstream handshake; a refused URL closes the tunnel with 1014. */
100
+ private connectUpstream;
101
+ /** The upstream is open: the policy's opening frames go first, then what the browser sent meanwhile. */
102
+ private onUpstreamOpen;
103
+ /** The policy's opening frames; a policy that throws closes the tunnel with 1011. */
104
+ private openingFrames;
105
+ /** A client frame after the first: binary is dropped, text goes through the policy's filter. */
106
+ private fromBrowser;
107
+ /** The policy's verdict on a client frame; a policy that throws drops the frame. */
108
+ private filter;
109
+ /**
110
+ * Holds a frame until the upstream opens; past either cap (frames or bytes) the oldest go (stale audio is worthless
111
+ * anyway). A frame larger than the byte cap on its own is dropped.
112
+ */
113
+ private hold;
114
+ /**
115
+ * A server frame: a handle it carries is recorded before the frame goes to the browser, unchanged; then the browser
116
+ * leg's queue is checked against the cap.
117
+ */
118
+ private onUpstreamMessage;
119
+ /**
120
+ * A browser that cannot keep up (its queued bytes pass `MaxBrowserBufferedBytes` after a downstream send) is closed
121
+ * with 1013 and the upstream with 1001; the client resumes on a new connection.
122
+ */
123
+ private closeIfBrowserBehind;
124
+ /** The resumption handle the policy finds in a server frame, if any; a policy that throws finds none. */
125
+ private observe;
126
+ /** Sends one text frame upstream and counts it; then the upstream leg's queue is checked against the cap. */
127
+ private sendUp;
128
+ /**
129
+ * An upstream that has stopped reading (its queued bytes pass `MaxUpstreamBufferedBytes` after an upstream send) is
130
+ * closed with 1001 and the browser with 1013, before the ping watchdog would notice; the client resumes on a new
131
+ * connection.
132
+ */
133
+ private closeIfUpstreamBehind;
134
+ /** Sends on a leg that is open, keeping text as text and binary as binary; a failed send closes the tunnel. */
135
+ private send;
136
+ /**
137
+ * Pings each open leg, so idle timeouts on load balancers and ingresses do not close it. A leg that answered none of
138
+ * its last `MaxMissedPongs` pings is gone: it is terminated and the other leg closed.
139
+ */
140
+ private pingBoth;
141
+ /** A leg stopped answering pings: it is terminated, and the other leg closes (1001 upstream, 1014 to the browser). */
142
+ private closeSilentLeg;
143
+ /** The upstream closed: the browser gets the same code and reason (1014 when the upstream sent none). */
144
+ private onUpstreamClose;
145
+ /** The browser closed: the upstream gets the same code and reason (1001 when the browser sent none). */
146
+ private onBrowserClose;
147
+ /** The upstream failed (a refused handshake, a dropped socket): the browser gets 1014. */
148
+ private onUpstreamError;
149
+ /** The browser leg failed; `ws` has already closed it with the right code (1009 for an oversized frame). */
150
+ private onBrowserError;
151
+ /**
152
+ * Closes both legs (the upstream with the browser's close unless it gets its own), stops the timers and reports to
153
+ * the server. Idempotent.
154
+ */
155
+ private closeWith;
156
+ /** Closes one leg unless it is already closing; `Terminate`, or a handshake in progress, drops the socket. */
157
+ private static closeLeg;
158
+ private static terminate;
159
+ /** Refuses the connection with 1008; the reason is logged, the browser only learns it was refused. */
160
+ private refuse;
161
+ private static after;
162
+ private static cancel;
163
+ private stopTimers;
164
+ /** Counts a dropped client frame under a sanitized label (the label is the policy's, never the payload). */
165
+ private countDrop;
166
+ private get label();
167
+ private warn;
168
+ private logOpened;
169
+ private logClosed;
170
+ }
171
+ //# sourceMappingURL=RealtimeRelayTunnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeRelayTunnel.d.ts","sourceRoot":"","sources":["../../src/realtimeProxy/RealtimeRelayTunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,QAAQ,EAAgB,MAAM,IAAI,CAAC;AACzD,OAAO,EAGH,KAAK,oBAAoB,EAI5B,MAAM,oBAAoB,CAAC;AAE5B,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAChC,iFAAiF;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mGAAmG;IACnG,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,8FAA8F;IAC9F,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,wBAAwB,EAAE,MAAM,CAAC;CACpC;AAED,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,mBAAmB,CAS9D,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,qCAAqC,QAAkB,CAAC;AA4BrE,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACpC,gHAAgH;IAChH,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC7C,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC/C;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;IAsBxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAzBzB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,MAAM,CAAwC;IACtD,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAK;IACzB,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4D;IACpF,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyD;IACpF,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,MAAM,CAAS;gBAGF,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,uBAAuB;IAGlD,oDAAoD;IACpD,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,qFAAqF;IAC9E,KAAK,IAAI,IAAI;IAUpB,kGAAkG;IAC3F,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlD,OAAO,CAAC,gBAAgB;IAWxB,gHAAgH;IAChH,OAAO,CAAC,kBAAkB;IA4B1B,qHAAqH;IACrH,OAAO,CAAC,UAAU;IASlB,yFAAyF;YAC3E,YAAY;IAqB1B,qGAAqG;YACvF,YAAY;IAU1B,gFAAgF;IAChF,OAAO,CAAC,eAAe;IAWvB,wGAAwG;IACxG,OAAO,CAAC,cAAc;IAmBtB,qFAAqF;IACrF,OAAO,CAAC,aAAa;IAYrB,gGAAgG;IAChG,OAAO,CAAC,WAAW;IAiBnB,oFAAoF;IACpF,OAAO,CAAC,MAAM;IAQd;;;OAGG;IACH,OAAO,CAAC,IAAI;IAYZ;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAa5B,yGAAyG;IACzG,OAAO,CAAC,OAAO;IASf,6GAA6G;IAC7G,OAAO,CAAC,MAAM;IAQd;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAa7B,+GAA+G;IAC/G,OAAO,CAAC,IAAI;IAaZ;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAmBhB,sHAAsH;IACtH,OAAO,CAAC,cAAc;IAYtB,yGAAyG;IACzG,OAAO,CAAC,eAAe;IAKvB,wGAAwG;IACxG,OAAO,CAAC,cAAc;IAKtB,0FAA0F;IAC1F,OAAO,CAAC,eAAe;IASvB,4GAA4G;IAC5G,OAAO,CAAC,cAAc;IAQtB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAejB,8GAA8G;IAC9G,OAAO,CAAC,MAAM,CAAC,QAAQ;IAkBvB,OAAO,CAAC,MAAM,CAAC,SAAS;IAQxB,sGAAsG;IACtG,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM,CAAC,KAAK;IAMpB,OAAO,CAAC,MAAM,CAAC,MAAM;IAMrB,OAAO,CAAC,UAAU;IAUlB,4GAA4G;IAC5G,OAAO,CAAC,SAAS;IAWjB,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,SAAS;CAWpB"}