@dxos/plugin-thread 0.8.4-main.67995b8 → 0.8.4-main.c4373fc

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 (283) hide show
  1. package/dist/lib/browser/ChannelContainer-BGDGZHV4.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-75KJZ4XR.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-ODKIAXR7.mjs} +19 -19
  4. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-BCKLI4QD.mjs} +7 -7
  6. package/dist/lib/browser/call-manager-BCKLI4QD.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2MUYQOQE.mjs +23 -0
  8. package/dist/lib/browser/{chunk-FR7KJPNY.mjs.map → chunk-2MUYQOQE.mjs.map} +3 -3
  9. package/dist/lib/browser/chunk-B7YQ7QR2.mjs +376 -0
  10. package/dist/lib/browser/chunk-B7YQ7QR2.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-CMCVHULC.mjs} +235 -233
  12. package/dist/lib/browser/chunk-CMCVHULC.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  14. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-HDEQRBOC.mjs} +38 -6
  16. package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-HDEQRBOC.mjs.map} +4 -4
  17. package/dist/lib/browser/chunk-L326LSNS.mjs +18 -0
  18. package/dist/lib/browser/chunk-L326LSNS.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-EV4JWI7L.mjs → chunk-T4KJ5JR4.mjs} +5 -7
  20. package/dist/lib/browser/chunk-T4KJ5JR4.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-VJMKS4CZ.mjs +619 -0
  22. package/dist/lib/browser/chunk-VJMKS4CZ.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-VTYX3SIM.mjs} +26 -16
  24. package/dist/lib/browser/chunk-VTYX3SIM.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-XYUJXHYV.mjs} +55 -5
  26. package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-ZCEU5K23.mjs} +461 -240
  28. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +23 -14
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-VOQD3TQ2.mjs} +75 -17
  32. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs.map +7 -0
  33. package/dist/lib/browser/{markdown-M3FMR7OD.mjs → markdown-R6MGRIA6.mjs} +7 -7
  34. package/dist/lib/browser/markdown-R6MGRIA6.mjs.map +7 -0
  35. package/dist/lib/browser/meta.json +1 -1
  36. package/dist/lib/browser/react-root-UMSBTN6H.mjs +28 -0
  37. package/dist/lib/browser/react-root-UMSBTN6H.mjs.map +7 -0
  38. package/dist/lib/browser/{react-surface-XWS6GIZY.mjs → react-surface-SXMQEWKE.mjs} +22 -22
  39. package/dist/lib/browser/react-surface-SXMQEWKE.mjs.map +7 -0
  40. package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-TCNF54PN.mjs} +5 -5
  41. package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-TCNF54PN.mjs.map} +1 -1
  42. package/dist/lib/browser/{state-H6CYONWE.mjs → state-ZQ4IPOJT.mjs} +5 -5
  43. package/dist/lib/browser/state-ZQ4IPOJT.mjs.map +7 -0
  44. package/dist/lib/browser/toolkit-JF4B4QIO.mjs +84 -0
  45. package/dist/lib/browser/toolkit-JF4B4QIO.mjs.map +7 -0
  46. package/dist/lib/browser/types/index.mjs +2 -2
  47. package/dist/lib/node-esm/ChannelContainer-OXC6BTU7.mjs +17 -0
  48. package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-SH6LTFQL.mjs} +6 -6
  49. package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-DMPT3MY6.mjs} +19 -19
  50. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs.map +7 -0
  51. package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-Q7RY2YP4.mjs} +7 -7
  52. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-2KZ4ODHU.mjs} +235 -233
  54. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-2MMJF7DW.mjs} +38 -6
  56. package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-2V3WSLUZ.mjs} +55 -5
  58. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  60. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-BAMZXJS4.mjs} +26 -16
  62. package/dist/lib/node-esm/chunk-BAMZXJS4.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs +377 -0
  64. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs +25 -0
  66. package/dist/lib/node-esm/{chunk-2CXOK2TD.mjs.map → chunk-GZ4WL2IS.mjs.map} +3 -3
  67. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs +19 -0
  68. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs +620 -0
  70. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-GRLRWTRU.mjs → chunk-OBVAURUU.mjs} +5 -7
  72. package/dist/lib/node-esm/chunk-OBVAURUU.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-TIPIOH2J.mjs} +461 -240
  74. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
  75. package/dist/lib/node-esm/index.mjs +23 -14
  76. package/dist/lib/node-esm/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-AKVH66PH.mjs} +75 -17
  78. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs.map +7 -0
  79. package/dist/lib/node-esm/{markdown-INKTE4MH.mjs → markdown-MYGTDXT6.mjs} +7 -7
  80. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs.map +7 -0
  81. package/dist/lib/node-esm/meta.json +1 -1
  82. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs +29 -0
  83. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs.map +7 -0
  84. package/dist/lib/node-esm/{react-surface-MJ33KPYE.mjs → react-surface-NLSZJGMO.mjs} +22 -22
  85. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs.map +7 -0
  86. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-ZQHGVFBY.mjs} +5 -5
  87. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-ZQHGVFBY.mjs.map} +1 -1
  88. package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-FSLLJ5TZ.mjs} +5 -5
  89. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs.map +7 -0
  90. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs +85 -0
  91. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs.map +7 -0
  92. package/dist/lib/node-esm/types/index.mjs +2 -2
  93. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  94. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  95. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  96. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  97. package/dist/types/src/calls/media-manager.d.ts +1 -1
  98. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  99. package/dist/types/src/calls/types.d.ts +1 -1
  100. package/dist/types/src/calls/types.d.ts.map +1 -1
  101. package/dist/types/src/calls/util/calls-service.d.ts +4 -2
  102. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  103. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  104. package/dist/types/src/calls-service.stories.d.ts +10 -9
  105. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  107. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/call-manager.d.ts +1 -1
  109. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  111. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/index.d.ts +11 -10
  113. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  115. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  117. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  119. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  120. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/settings.d.ts +1 -1
  122. package/dist/types/src/capabilities/state.d.ts +2 -2
  123. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/toolkit.d.ts +6 -0
  125. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  126. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  127. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  128. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  129. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  130. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  131. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  132. package/dist/types/src/components/ChannelContainer.stories.d.ts +89 -5
  133. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Chat.stories.d.ts +91 -5
  135. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  137. package/dist/types/src/components/Comments.stories.d.ts +160 -4
  138. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  140. package/dist/types/src/components/CommentsThreadContainer.d.ts +2 -2
  141. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  142. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  143. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  144. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  145. package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
  146. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/MessageContainer.d.ts +4 -1
  148. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  149. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  150. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  151. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +155 -3
  152. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  153. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +157 -4
  154. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  156. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  157. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  158. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  160. package/dist/types/src/components/testing.d.ts +1 -0
  161. package/dist/types/src/components/testing.d.ts.map +1 -1
  162. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  163. package/dist/types/src/hooks/index.d.ts +1 -0
  164. package/dist/types/src/hooks/index.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  166. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  167. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  168. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  169. package/dist/types/src/meta.d.ts +1 -2
  170. package/dist/types/src/meta.d.ts.map +1 -1
  171. package/dist/types/src/translations.d.ts +3 -1
  172. package/dist/types/src/translations.d.ts.map +1 -1
  173. package/dist/types/src/types/schema.d.ts +126 -109
  174. package/dist/types/src/types/schema.d.ts.map +1 -1
  175. package/dist/types/src/types/types.d.ts +259 -172
  176. package/dist/types/src/types/types.d.ts.map +1 -1
  177. package/dist/types/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +64 -62
  179. package/src/ThreadPlugin.tsx +130 -124
  180. package/src/calls/call-manager.ts +2 -2
  181. package/src/calls/call-swarm-synchronizer.ts +1 -1
  182. package/src/calls/media-manager.ts +60 -34
  183. package/src/calls/types.ts +8 -4
  184. package/src/calls/util/calls-service.ts +65 -14
  185. package/src/calls/util/stub-media-streams.ts +62 -5
  186. package/src/calls-service.stories.tsx +78 -65
  187. package/src/capabilities/app-graph-builder.ts +18 -14
  188. package/src/capabilities/call-manager.ts +3 -2
  189. package/src/capabilities/capabilities.ts +7 -7
  190. package/src/capabilities/index.ts +1 -0
  191. package/src/capabilities/intent-resolver.ts +43 -9
  192. package/src/capabilities/markdown.ts +4 -3
  193. package/src/capabilities/react-root.tsx +2 -2
  194. package/src/capabilities/react-surface.tsx +14 -13
  195. package/src/capabilities/state.ts +2 -1
  196. package/src/capabilities/toolkit.ts +82 -0
  197. package/src/components/Call/Call.tsx +3 -2
  198. package/src/components/Call/Toolbar.tsx +5 -5
  199. package/src/components/CallDebugPanel.tsx +108 -49
  200. package/src/components/CallSidebar.tsx +2 -1
  201. package/src/components/ChannelContainer.stories.tsx +11 -10
  202. package/src/components/ChannelContainer.tsx +8 -7
  203. package/src/components/Chat.stories.tsx +34 -31
  204. package/src/components/ChatContainer.tsx +8 -4
  205. package/src/components/Comments.stories.tsx +39 -38
  206. package/src/components/CommentsContainer.tsx +2 -1
  207. package/src/components/CommentsThreadContainer.tsx +9 -7
  208. package/src/components/Lobby/Lobby.tsx +1 -1
  209. package/src/components/Media/VideoObject.stories.tsx +36 -28
  210. package/src/components/MessageContainer.tsx +43 -9
  211. package/src/components/Participant/Participant.tsx +13 -7
  212. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  213. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +8 -8
  214. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +44 -42
  215. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  216. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  217. package/src/components/ThreadComplementary.tsx +37 -7
  218. package/src/components/ThreadSettings.tsx +6 -7
  219. package/src/components/command-extension.ts +5 -2
  220. package/src/components/testing.ts +22 -0
  221. package/src/extensions/threads.ts +3 -3
  222. package/src/hooks/index.ts +1 -0
  223. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  224. package/src/hooks/useDebugMode.ts +1 -1
  225. package/src/hooks/useVideoStreamTrack.tsx +6 -3
  226. package/src/meta.ts +3 -4
  227. package/src/testing/stories.ts +3 -3
  228. package/src/translations.ts +3 -1
  229. package/src/types/schema.ts +1 -1
  230. package/src/types/types.ts +22 -13
  231. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  232. package/src/typings.d.ts +8 -0
  233. package/src/util.ts +1 -1
  234. package/dist/lib/browser/ChannelContainer-3GIE7ASU.mjs +0 -16
  235. package/dist/lib/browser/ChatContainer-AIGIWAUG.mjs +0 -15
  236. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  237. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-3SGRT4NM.mjs +0 -367
  239. package/dist/lib/browser/chunk-3SGRT4NM.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-FR7KJPNY.mjs +0 -21
  244. package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
  245. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  247. package/dist/lib/browser/chunk-LGSDKXPF.mjs +0 -18
  248. package/dist/lib/browser/chunk-LGSDKXPF.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
  250. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  252. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  253. package/dist/lib/browser/markdown-M3FMR7OD.mjs.map +0 -7
  254. package/dist/lib/browser/react-root-JEUSQXI6.mjs +0 -28
  255. package/dist/lib/browser/react-root-JEUSQXI6.mjs.map +0 -7
  256. package/dist/lib/browser/react-surface-XWS6GIZY.mjs.map +0 -7
  257. package/dist/lib/browser/state-H6CYONWE.mjs.map +0 -7
  258. package/dist/lib/node-esm/ChannelContainer-7FXCKO7X.mjs +0 -17
  259. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  260. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-2CXOK2TD.mjs +0 -23
  262. package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
  263. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-75RJ5DJI.mjs +0 -19
  266. package/dist/lib/node-esm/chunk-75RJ5DJI.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-FLBFYGBK.mjs +0 -368
  269. package/dist/lib/node-esm/chunk-FLBFYGBK.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
  274. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  275. package/dist/lib/node-esm/markdown-INKTE4MH.mjs.map +0 -7
  276. package/dist/lib/node-esm/react-root-XYYY2JXZ.mjs +0 -29
  277. package/dist/lib/node-esm/react-root-XYYY2JXZ.mjs.map +0 -7
  278. package/dist/lib/node-esm/react-surface-MJ33KPYE.mjs.map +0 -7
  279. package/dist/lib/node-esm/state-D7WNDT3N.mjs.map +0 -7
  280. /package/dist/lib/browser/{ChannelContainer-3GIE7ASU.mjs.map → ChannelContainer-BGDGZHV4.mjs.map} +0 -0
  281. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-75KJZ4XR.mjs.map} +0 -0
  282. /package/dist/lib/node-esm/{ChannelContainer-7FXCKO7X.mjs.map → ChannelContainer-OXC6BTU7.mjs.map} +0 -0
  283. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-SH6LTFQL.mjs.map} +0 -0
@@ -2,11 +2,13 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  createBlackCanvasStreamTrack,
4
4
  createInaudibleAudioStreamTrack
5
- } from "./chunk-OU5BYIDO.mjs";
5
+ } from "./chunk-2V3WSLUZ.mjs";
6
6
 
7
7
  // src/calls/types.ts
8
+ import { invariant } from "@dxos/invariant";
8
9
  import { buf } from "@dxos/protocols/buf";
9
10
  import { UserStateSchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
11
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/types.ts";
10
12
  var CALLS_URL = "https://calls-service.dxos.workers.dev";
11
13
  var codec = {
12
14
  encode: (message) => {
@@ -18,14 +20,42 @@ var codec = {
18
20
  };
19
21
  var TrackNameCodec = {
20
22
  encode: (trackData) => {
21
- return trackData.sessionId + "/" + trackData.trackName;
23
+ invariant(trackData.sessionId, void 0, {
24
+ F: __dxlog_file,
25
+ L: 65,
26
+ S: void 0,
27
+ A: [
28
+ "trackData.sessionId",
29
+ ""
30
+ ]
31
+ });
32
+ invariant(trackData.trackName, void 0, {
33
+ F: __dxlog_file,
34
+ L: 66,
35
+ S: void 0,
36
+ A: [
37
+ "trackData.trackName",
38
+ ""
39
+ ]
40
+ });
41
+ invariant(trackData.mid, void 0, {
42
+ F: __dxlog_file,
43
+ L: 67,
44
+ S: void 0,
45
+ A: [
46
+ "trackData.mid",
47
+ ""
48
+ ]
49
+ });
50
+ return trackData.sessionId + "/" + trackData.trackName + "/" + trackData.mid;
22
51
  },
23
52
  decode: (name) => {
24
- const [sessionId, trackName] = name.split("/");
53
+ const [sessionId, trackName, mid] = name.split("/");
25
54
  return {
26
55
  sessionId,
27
56
  trackName,
28
- location: "remote"
57
+ location: "remote",
58
+ mid
29
59
  };
30
60
  }
31
61
  };
@@ -35,37 +65,35 @@ import md5Hex from "md5-hex";
35
65
  import { DeferredTask, Event, scheduleTaskInterval, synchronized } from "@dxos/async";
36
66
  import { Context, Resource } from "@dxos/context";
37
67
  import { generateName } from "@dxos/display-name";
38
- import { invariant } from "@dxos/invariant";
68
+ import { invariant as invariant2 } from "@dxos/invariant";
39
69
  import { PublicKey } from "@dxos/keys";
40
70
  import { log } from "@dxos/log";
41
71
  import { buf as buf2 } from "@dxos/protocols/buf";
42
72
  import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
43
73
  import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
44
74
  import { isNonNullable } from "@dxos/util";
75
+ function _define_property(obj, key, value) {
76
+ if (key in obj) {
77
+ Object.defineProperty(obj, key, {
78
+ value,
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true
82
+ });
83
+ } else {
84
+ obj[key] = value;
85
+ }
86
+ return obj;
87
+ }
45
88
  function _ts_decorate(decorators, target, key, desc) {
46
89
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
47
90
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
48
91
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
49
92
  return c > 3 && r && Object.defineProperty(target, key, r), r;
50
93
  }
51
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
94
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
52
95
  var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
53
96
  var CallSwarmSynchronizer = class extends Resource {
54
- constructor({ networkService }) {
55
- super();
56
- this.stateUpdated = new Event();
57
- this._state = {
58
- activities: {}
59
- };
60
- this._lastSwarmEvent = void 0;
61
- this._reconcileSwarmStateTask = void 0;
62
- this._identityKey = void 0;
63
- this._deviceKey = void 0;
64
- this._displayName = void 0;
65
- this._swarmCtx = void 0;
66
- this._sendStateTask = void 0;
67
- this._networkService = networkService;
68
- }
69
97
  /**
70
98
  * @internal
71
99
  */
@@ -131,7 +159,7 @@ var CallSwarmSynchronizer = class extends Resource {
131
159
  log.verbose("joined to a different room", {
132
160
  roomId
133
161
  }, {
134
- F: __dxlog_file,
162
+ F: __dxlog_file2,
135
163
  L: 152,
136
164
  S: this,
137
165
  C: (f, a) => f(...a)
@@ -153,8 +181,8 @@ var CallSwarmSynchronizer = class extends Resource {
153
181
  this._reconcileSwarmStateTask = void 0;
154
182
  }
155
183
  async join() {
156
- invariant(this._state.roomId, void 0, {
157
- F: __dxlog_file,
184
+ invariant2(this._state.roomId, void 0, {
185
+ F: __dxlog_file2,
158
186
  L: 176,
159
187
  S: this,
160
188
  A: [
@@ -162,8 +190,8 @@ var CallSwarmSynchronizer = class extends Resource {
162
190
  ""
163
191
  ]
164
192
  });
165
- invariant(!this._swarmCtx, "Already joined", {
166
- F: __dxlog_file,
193
+ invariant2(!this._swarmCtx, "Already joined", {
194
+ F: __dxlog_file2,
167
195
  L: 177,
168
196
  S: this,
169
197
  A: [
@@ -172,7 +200,7 @@ var CallSwarmSynchronizer = class extends Resource {
172
200
  ]
173
201
  });
174
202
  this._swarmCtx = new Context(void 0, {
175
- F: __dxlog_file,
203
+ F: __dxlog_file2,
176
204
  L: 179
177
205
  });
178
206
  const topic = getTopic(this._state.roomId);
@@ -183,7 +211,7 @@ var CallSwarmSynchronizer = class extends Resource {
183
211
  peerKey: this._deviceKey
184
212
  }
185
213
  }, {
186
- F: __dxlog_file,
214
+ F: __dxlog_file2,
187
215
  L: 181,
188
216
  S: this,
189
217
  C: (f, a) => f(...a)
@@ -202,7 +230,7 @@ var CallSwarmSynchronizer = class extends Resource {
202
230
  peerKey: this._deviceKey
203
231
  }
204
232
  }, {
205
- F: __dxlog_file,
233
+ F: __dxlog_file2,
206
234
  L: 188,
207
235
  S: this,
208
236
  C: (f, a) => f(...a)
@@ -214,7 +242,7 @@ var CallSwarmSynchronizer = class extends Resource {
214
242
  peerKey: this._deviceKey
215
243
  }
216
244
  }).catch((err) => log.catch(err, void 0, {
217
- F: __dxlog_file,
245
+ F: __dxlog_file2,
218
246
  L: 194,
219
247
  S: this,
220
248
  C: (f, a) => f(...a)
@@ -282,8 +310,8 @@ var CallSwarmSynchronizer = class extends Resource {
282
310
  }
283
311
  async _reconcileSwarmState() {
284
312
  const swarmEvent = this._lastSwarmEvent;
285
- invariant(swarmEvent, void 0, {
286
- F: __dxlog_file,
313
+ invariant2(swarmEvent, void 0, {
314
+ F: __dxlog_file2,
287
315
  L: 273,
288
316
  S: this,
289
317
  A: [
@@ -303,7 +331,7 @@ var CallSwarmSynchronizer = class extends Resource {
303
331
  error,
304
332
  peer
305
333
  }, {
306
- F: __dxlog_file,
334
+ F: __dxlog_file2,
307
335
  L: 290,
308
336
  S: this,
309
337
  C: (f, a) => f(...a)
@@ -316,7 +344,7 @@ var CallSwarmSynchronizer = class extends Resource {
316
344
  log("reconciling swarm state", {
317
345
  users
318
346
  }, {
319
- F: __dxlog_file,
347
+ F: __dxlog_file2,
320
348
  L: 297,
321
349
  S: this,
322
350
  C: (f, a) => f(...a)
@@ -339,6 +367,12 @@ var CallSwarmSynchronizer = class extends Resource {
339
367
  scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
340
368
  }
341
369
  }
370
+ constructor({ networkService }) {
371
+ super(), _define_property(this, "stateUpdated", new Event()), _define_property(this, "_state", {
372
+ activities: {}
373
+ }), _define_property(this, "_networkService", void 0), _define_property(this, "_lastSwarmEvent", void 0), _define_property(this, "_reconcileSwarmStateTask", void 0), _define_property(this, "_identityKey", void 0), _define_property(this, "_deviceKey", void 0), _define_property(this, "_displayName", void 0), _define_property(this, "_swarmCtx", void 0), _define_property(this, "_sendStateTask", void 0);
374
+ this._networkService = networkService;
375
+ }
342
376
  };
343
377
  _ts_decorate([
344
378
  synchronized
@@ -404,17 +438,26 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
404
438
  };
405
439
 
406
440
  // src/calls/util/calls-service.ts
407
- import { PersistentLifecycle } from "@dxos/async";
441
+ import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
408
442
  import { Resource as Resource2 } from "@dxos/context";
409
- import { invariant as invariant2 } from "@dxos/invariant";
443
+ import { invariant as invariant3 } from "@dxos/invariant";
410
444
  import { log as log2 } from "@dxos/log";
411
445
 
412
446
  // src/calls/util/history-cache.ts
413
- var HistoryCache = class {
414
- constructor(limit = 100) {
415
- this._limit = limit;
416
- this._messages = [];
447
+ function _define_property2(obj, key, value) {
448
+ if (key in obj) {
449
+ Object.defineProperty(obj, key, {
450
+ value,
451
+ enumerable: true,
452
+ configurable: true,
453
+ writable: true
454
+ });
455
+ } else {
456
+ obj[key] = value;
417
457
  }
458
+ return obj;
459
+ }
460
+ var HistoryCache = class {
418
461
  push(...messages) {
419
462
  if (this._messages.length >= this._limit) {
420
463
  this._messages.shift();
@@ -424,53 +467,98 @@ var HistoryCache = class {
424
467
  get() {
425
468
  return this._messages;
426
469
  }
470
+ constructor(limit = 100) {
471
+ _define_property2(this, "_limit", void 0);
472
+ _define_property2(this, "_messages", void 0);
473
+ this._limit = limit;
474
+ this._messages = [];
475
+ }
427
476
  };
428
477
 
429
478
  // src/calls/util/task-scheduling.ts
479
+ function _check_private_redeclaration(obj, privateCollection) {
480
+ if (privateCollection.has(obj)) {
481
+ throw new TypeError("Cannot initialize the same private elements twice on an object");
482
+ }
483
+ }
484
+ function _class_apply_descriptor_get(receiver, descriptor) {
485
+ if (descriptor.get) {
486
+ return descriptor.get.call(receiver);
487
+ }
488
+ return descriptor.value;
489
+ }
490
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
491
+ if (descriptor.set) {
492
+ descriptor.set.call(receiver, value);
493
+ } else {
494
+ if (!descriptor.writable) {
495
+ throw new TypeError("attempted to set read only private field");
496
+ }
497
+ descriptor.value = value;
498
+ }
499
+ }
500
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
501
+ if (!privateMap.has(receiver)) {
502
+ throw new TypeError("attempted to " + action + " private field on non-instance");
503
+ }
504
+ return privateMap.get(receiver);
505
+ }
506
+ function _class_private_field_get(receiver, privateMap) {
507
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
508
+ return _class_apply_descriptor_get(receiver, descriptor);
509
+ }
510
+ function _class_private_field_init(obj, privateMap, value) {
511
+ _check_private_redeclaration(obj, privateMap);
512
+ privateMap.set(obj, value);
513
+ }
514
+ function _class_private_field_set(receiver, privateMap, value) {
515
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
516
+ _class_apply_descriptor_set(receiver, descriptor, value);
517
+ return value;
518
+ }
430
519
  var DefaultBatchSizeLimit = 64;
520
+ var _schedulerChain = /* @__PURE__ */ new WeakMap();
431
521
  var FIFOScheduler = class {
432
- #schedulerChain;
433
- constructor() {
434
- this.#schedulerChain = Promise.resolve();
435
- }
436
522
  schedule(task) {
437
523
  return new Promise((resolve, reject) => {
438
- this.#schedulerChain = this.#schedulerChain.then(async () => {
524
+ _class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
439
525
  try {
440
526
  resolve(await task());
441
527
  } catch (error) {
442
528
  reject(error);
443
529
  }
444
- });
530
+ }));
445
531
  });
446
532
  }
533
+ constructor() {
534
+ _class_private_field_init(this, _schedulerChain, {
535
+ writable: true,
536
+ value: void 0
537
+ });
538
+ _class_private_field_set(this, _schedulerChain, Promise.resolve());
539
+ }
447
540
  };
541
+ var _currentBatch = /* @__PURE__ */ new WeakMap();
542
+ var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
543
+ var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
448
544
  var BulkRequestDispatcher = class {
449
- #currentBatch;
450
- #currentBulkResponse;
451
- #batchSizeLimit;
452
- constructor(batchSizeLimit = DefaultBatchSizeLimit) {
453
- this.#currentBatch = [];
454
- this.#currentBulkResponse = null;
455
- this.#batchSizeLimit = batchSizeLimit;
456
- }
457
545
  /**
458
546
  * Returns a bulk response promise.
459
547
  * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
460
548
  */
461
549
  doBulkRequest(params, bulkRequestFunc) {
462
- if (this.#currentBatch.length >= this.#batchSizeLimit) {
463
- this.#currentBatch = [];
464
- this.#currentBulkResponse = null;
550
+ if (_class_private_field_get(this, _currentBatch).length >= _class_private_field_get(this, _batchSizeLimit)) {
551
+ _class_private_field_set(this, _currentBatch, []);
552
+ _class_private_field_set(this, _currentBulkResponse, null);
465
553
  }
466
- this.#currentBatch.push(params);
467
- if (this.#currentBulkResponse != null) {
468
- return this.#currentBulkResponse;
554
+ _class_private_field_get(this, _currentBatch).push(params);
555
+ if (_class_private_field_get(this, _currentBulkResponse) != null) {
556
+ return _class_private_field_get(this, _currentBulkResponse);
469
557
  }
470
- const batch = this.#currentBatch;
471
- this.#currentBulkResponse = new Promise((resolve, reject) => {
558
+ const batch = _class_private_field_get(this, _currentBatch);
559
+ _class_private_field_set(this, _currentBulkResponse, new Promise((resolve, reject) => {
472
560
  setTimeout(() => {
473
- this.#currentBulkResponse = null;
561
+ _class_private_field_set(this, _currentBulkResponse, null);
474
562
  const batchCopy = batch.splice(0, batch.length);
475
563
  bulkRequestFunc(batchCopy).then((result) => {
476
564
  resolve(result);
@@ -478,28 +566,45 @@ var BulkRequestDispatcher = class {
478
566
  reject(err);
479
567
  });
480
568
  }, 0);
569
+ }));
570
+ return _class_private_field_get(this, _currentBulkResponse);
571
+ }
572
+ constructor(batchSizeLimit = DefaultBatchSizeLimit) {
573
+ _class_private_field_init(this, _currentBatch, {
574
+ writable: true,
575
+ value: void 0
481
576
  });
482
- return this.#currentBulkResponse;
577
+ _class_private_field_init(this, _currentBulkResponse, {
578
+ writable: true,
579
+ value: void 0
580
+ });
581
+ _class_private_field_init(this, _batchSizeLimit, {
582
+ writable: true,
583
+ value: void 0
584
+ });
585
+ _class_private_field_set(this, _currentBatch, []);
586
+ _class_private_field_set(this, _currentBulkResponse, null);
587
+ _class_private_field_set(this, _batchSizeLimit, batchSizeLimit);
483
588
  }
484
589
  };
485
590
 
486
591
  // src/calls/util/calls-service.ts
487
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
488
- var NETWORK_TIMEOUT = 5e3;
489
- var CallsServicePeer = class extends Resource2 {
490
- constructor(config) {
491
- super();
492
- this.history = new HistoryCache(100);
493
- this._persistentLifecycle = new PersistentLifecycle({
494
- start: () => this._startSession(),
495
- stop: (session) => this._stopSession(session)
592
+ function _define_property3(obj, key, value) {
593
+ if (key in obj) {
594
+ Object.defineProperty(obj, key, {
595
+ value,
596
+ enumerable: true,
597
+ configurable: true,
598
+ writable: true
496
599
  });
497
- this.taskScheduler = new FIFOScheduler();
498
- this.pushTrackDispatcher = new BulkRequestDispatcher(32);
499
- this.pullTrackDispatcher = new BulkRequestDispatcher(32);
500
- this.closeTrackDispatcher = new BulkRequestDispatcher(32);
501
- this._config = config;
600
+ } else {
601
+ obj[key] = value;
502
602
  }
603
+ return obj;
604
+ }
605
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
606
+ var NETWORK_TIMEOUT = 5e3;
607
+ var CallsServicePeer = class extends Resource2 {
503
608
  async _open(ctx) {
504
609
  await this._persistentLifecycle.open(ctx);
505
610
  }
@@ -527,11 +632,11 @@ var CallsServicePeer = class extends Resource2 {
527
632
  });
528
633
  peerConnection.addEventListener("connectionstatechange", () => {
529
634
  if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
530
- log2.warn("calls connection failed", {
635
+ log2.info("calls connection failed", {
531
636
  state: peerConnection.connectionState
532
637
  }, {
533
- F: __dxlog_file2,
534
- L: 118,
638
+ F: __dxlog_file3,
639
+ L: 121,
535
640
  S: this,
536
641
  C: (f, a) => f(...a)
537
642
  });
@@ -542,11 +647,11 @@ var CallsServicePeer = class extends Resource2 {
542
647
  peerConnection.addEventListener("iceconnectionstatechange", () => {
543
648
  clearTimeout(iceTimeout);
544
649
  if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
545
- log2.warn("calls connection to ICEs failed", {
650
+ log2.info("calls connection to ICEs failed", {
546
651
  state: peerConnection.iceConnectionState
547
652
  }, {
548
- F: __dxlog_file2,
549
- L: 127,
653
+ F: __dxlog_file3,
654
+ L: 130,
550
655
  S: this,
551
656
  C: (f, a) => f(...a)
552
657
  });
@@ -556,19 +661,19 @@ var CallsServicePeer = class extends Resource2 {
556
661
  iceTimeout = window.setTimeout(() => {
557
662
  if (peerConnection.iceConnectionState === "connected") {
558
663
  log2.info("calls iceConnectionState is connected", void 0, {
559
- F: __dxlog_file2,
560
- L: 136,
664
+ F: __dxlog_file3,
665
+ L: 139,
561
666
  S: this,
562
667
  C: (f, a) => f(...a)
563
668
  });
564
669
  return;
565
670
  }
566
- log2.warn("calls iceConnectionState timed out", {
671
+ log2.info("calls iceConnectionState timed out", {
567
672
  state: peerConnection.iceConnectionState,
568
673
  timeoutSeconds
569
674
  }, {
570
- F: __dxlog_file2,
571
- L: 140,
675
+ F: __dxlog_file3,
676
+ L: 143,
572
677
  S: this,
573
678
  C: (f, a) => f(...a)
574
679
  });
@@ -580,8 +685,8 @@ var CallsServicePeer = class extends Resource2 {
580
685
  }
581
686
  async _initiateCallSession() {
582
687
  log2("creating new session", void 0, {
583
- F: __dxlog_file2,
584
- L: 150,
688
+ F: __dxlog_file3,
689
+ L: 153,
585
690
  S: this,
586
691
  C: (f, a) => f(...a)
587
692
  });
@@ -592,6 +697,7 @@ var CallsServicePeer = class extends Resource2 {
592
697
  }
593
698
  async _fetch(relativePath, requestInit) {
594
699
  this.history.push({
700
+ endpoint: relativePath,
595
701
  type: "request",
596
702
  time: (/* @__PURE__ */ new Date()).toISOString(),
597
703
  method: requestInit?.method ?? "GET",
@@ -606,8 +712,8 @@ var CallsServicePeer = class extends Resource2 {
606
712
  status: response.status,
607
713
  text: await response.text()
608
714
  }, {
609
- F: __dxlog_file2,
610
- L: 165,
715
+ F: __dxlog_file3,
716
+ L: 169,
611
717
  S: this,
612
718
  C: (f, a) => f(...a)
613
719
  });
@@ -616,6 +722,7 @@ var CallsServicePeer = class extends Resource2 {
616
722
  try {
617
723
  const data = await response.clone().json();
618
724
  this.history.push({
725
+ endpoint: relativePath,
619
726
  type: "response",
620
727
  time: (/* @__PURE__ */ new Date()).toISOString(),
621
728
  status: response.status,
@@ -628,6 +735,7 @@ var CallsServicePeer = class extends Resource2 {
628
735
  } catch (error) {
629
736
  const text = await response.text();
630
737
  this.history.push({
738
+ endpoint: relativePath,
631
739
  type: "response",
632
740
  time: (/* @__PURE__ */ new Date()).toISOString(),
633
741
  status: response.status,
@@ -638,8 +746,8 @@ var CallsServicePeer = class extends Resource2 {
638
746
  text,
639
747
  status: response.status
640
748
  }, {
641
- F: __dxlog_file2,
642
- L: 190,
749
+ F: __dxlog_file3,
750
+ L: 196,
643
751
  S: this,
644
752
  C: (f, a) => f(...a)
645
753
  });
@@ -648,8 +756,8 @@ var CallsServicePeer = class extends Resource2 {
648
756
  }
649
757
  async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
650
758
  log2.verbose("pushing track ", trackName, {
651
- F: __dxlog_file2,
652
- L: 212,
759
+ F: __dxlog_file3,
760
+ L: 218,
653
761
  S: this,
654
762
  C: (f, a) => f(...a)
655
763
  });
@@ -674,9 +782,9 @@ var CallsServicePeer = class extends Resource2 {
674
782
  }))
675
783
  })
676
784
  });
677
- invariant2(response.tracks !== void 0, void 0, {
678
- F: __dxlog_file2,
679
- L: 237,
785
+ invariant3(response.tracks !== void 0, void 0, {
786
+ F: __dxlog_file3,
787
+ L: 243,
680
788
  S: this,
681
789
  A: [
682
790
  "response.tracks !== undefined",
@@ -690,7 +798,7 @@ var CallsServicePeer = class extends Resource2 {
690
798
  return {
691
799
  tracks: response.tracks
692
800
  };
693
- })).then(({ tracks }) => {
801
+ })).then(async ({ tracks }) => {
694
802
  const trackData = tracks.find((t) => t.mid === transceiver.mid);
695
803
  if (trackData) {
696
804
  return {
@@ -700,19 +808,12 @@ var CallsServicePeer = class extends Resource2 {
700
808
  };
701
809
  } else {
702
810
  log2.error("missing track data", void 0, {
703
- F: __dxlog_file2,
704
- L: 257,
811
+ F: __dxlog_file3,
812
+ L: 267,
705
813
  S: this,
706
814
  C: (f, a) => f(...a)
707
815
  });
708
816
  }
709
- }).catch((err) => {
710
- log2.catch(err, void 0, {
711
- F: __dxlog_file2,
712
- L: 261,
713
- S: this,
714
- C: (f, a) => f(...a)
715
- });
716
817
  });
717
818
  const onDispose = async () => {
718
819
  if (transceiver.mid) {
@@ -725,9 +826,9 @@ var CallsServicePeer = class extends Resource2 {
725
826
  }
726
827
  async pushTrack({ track, encodings = [], ctx, previousTrack }) {
727
828
  await this.waitUntilOpen();
728
- invariant2(this.session, void 0, {
729
- F: __dxlog_file2,
730
- L: 288,
829
+ invariant3(this.session, void 0, {
830
+ F: __dxlog_file3,
831
+ L: 295,
731
832
  S: this,
732
833
  A: [
733
834
  "this.session",
@@ -739,8 +840,8 @@ var CallsServicePeer = class extends Resource2 {
739
840
  previousTrack,
740
841
  encodings
741
842
  }, {
742
- F: __dxlog_file2,
743
- L: 289,
843
+ F: __dxlog_file3,
844
+ L: 296,
744
845
  S: this,
745
846
  C: (f, a) => f(...a)
746
847
  });
@@ -752,8 +853,8 @@ var CallsServicePeer = class extends Resource2 {
752
853
  previousTrack,
753
854
  transceiver: transceiver2
754
855
  }, {
755
- F: __dxlog_file2,
756
- L: 293,
856
+ F: __dxlog_file3,
857
+ L: 300,
757
858
  S: this,
758
859
  C: (f, a) => f(...a)
759
860
  });
@@ -764,23 +865,23 @@ var CallsServicePeer = class extends Resource2 {
764
865
  previousTrack,
765
866
  transceiver: transceiver2
766
867
  }, {
767
- F: __dxlog_file2,
768
- L: 296,
868
+ F: __dxlog_file3,
869
+ L: 303,
769
870
  S: this,
770
871
  C: (f, a) => f(...a)
771
872
  });
772
873
  transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
773
- F: __dxlog_file2,
774
- L: 297,
874
+ F: __dxlog_file3,
875
+ L: 304,
775
876
  S: this,
776
877
  C: (f, a) => f(...a)
777
878
  }));
778
879
  return previousTrack;
779
880
  }
780
881
  }
781
- invariant2(track, void 0, {
782
- F: __dxlog_file2,
783
- L: 301,
882
+ invariant3(track, void 0, {
883
+ F: __dxlog_file3,
884
+ L: 308,
784
885
  S: this,
785
886
  A: [
786
887
  "track",
@@ -792,8 +893,8 @@ var CallsServicePeer = class extends Resource2 {
792
893
  direction: "sendonly"
793
894
  });
794
895
  log2.verbose("creating transceiver", void 0, {
795
- F: __dxlog_file2,
796
- L: 306,
896
+ F: __dxlog_file3,
897
+ L: 313,
797
898
  S: this,
798
899
  C: (f, a) => f(...a)
799
900
  });
@@ -804,9 +905,9 @@ var CallsServicePeer = class extends Resource2 {
804
905
  sessionId: this.session.sessionId,
805
906
  trackName: stableId
806
907
  });
807
- invariant2(pushedTrackData, void 0, {
808
- F: __dxlog_file2,
809
- L: 315,
908
+ invariant3(pushedTrackData, void 0, {
909
+ F: __dxlog_file3,
910
+ L: 322,
810
911
  S: this,
811
912
  A: [
812
913
  "pushedTrackData",
@@ -822,8 +923,8 @@ var CallsServicePeer = class extends Resource2 {
822
923
  };
823
924
  });
824
925
  transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
825
- F: __dxlog_file2,
826
- L: 322,
926
+ F: __dxlog_file3,
927
+ L: 329,
827
928
  S: this,
828
929
  C: (f, a) => f(...a)
829
930
  }));
@@ -835,8 +936,8 @@ var CallsServicePeer = class extends Resource2 {
835
936
  log2("pulling track", {
836
937
  trackName: trackData.trackName
837
938
  }, {
838
- F: __dxlog_file2,
839
- L: 340,
939
+ F: __dxlog_file3,
940
+ L: 347,
840
941
  S: this,
841
942
  C: (f, a) => f(...a)
842
943
  });
@@ -850,9 +951,9 @@ var CallsServicePeer = class extends Resource2 {
850
951
  if (newTrackResponse.errorCode) {
851
952
  throw new Error(newTrackResponse.errorDescription);
852
953
  }
853
- invariant2(newTrackResponse.tracks, void 0, {
854
- F: __dxlog_file2,
855
- L: 353,
954
+ invariant3(newTrackResponse.tracks, void 0, {
955
+ F: __dxlog_file3,
956
+ L: 360,
856
957
  S: this,
857
958
  A: [
858
959
  "newTrackResponse.tracks",
@@ -898,18 +999,18 @@ var CallsServicePeer = class extends Resource2 {
898
999
  mid = trackInfo.mid;
899
1000
  return track;
900
1001
  }).catch((err) => log2.catch(err, void 0, {
901
- F: __dxlog_file2,
902
- L: 405,
1002
+ F: __dxlog_file3,
1003
+ L: 412,
903
1004
  S: this,
904
1005
  C: (f, a) => f(...a)
905
1006
  }));
906
1007
  } else {
907
- log2.warn("missing track info", {
1008
+ log2.info("missing track info", {
908
1009
  trackData,
909
1010
  availableTracks: Array.from(trackMap.keys())
910
1011
  }, {
911
- F: __dxlog_file2,
912
- L: 407,
1012
+ F: __dxlog_file3,
1013
+ L: 414,
913
1014
  S: this,
914
1015
  C: (f, a) => f(...a)
915
1016
  });
@@ -918,8 +1019,8 @@ var CallsServicePeer = class extends Resource2 {
918
1019
  const onDispose = async () => {
919
1020
  if (mid) {
920
1021
  log2("closing pulled track ", trackData.trackName, {
921
- F: __dxlog_file2,
922
- L: 413,
1022
+ F: __dxlog_file3,
1023
+ L: 420,
923
1024
  S: this,
924
1025
  C: (f, a) => f(...a)
925
1026
  });
@@ -933,9 +1034,9 @@ var CallsServicePeer = class extends Resource2 {
933
1034
  }
934
1035
  async pullTrack({ ctx, trackData }) {
935
1036
  await this.waitUntilOpen();
936
- invariant2(this.session, void 0, {
937
- F: __dxlog_file2,
938
- L: 434,
1037
+ invariant3(this.session, void 0, {
1038
+ F: __dxlog_file3,
1039
+ L: 441,
939
1040
  S: this,
940
1041
  A: [
941
1042
  "this.session",
@@ -987,6 +1088,13 @@ var CallsServicePeer = class extends Resource2 {
987
1088
  }
988
1089
  }));
989
1090
  }
1091
+ constructor(config) {
1092
+ super(), _define_property3(this, "history", new HistoryCache(100)), _define_property3(this, "_persistentLifecycle", new PersistentLifecycle({
1093
+ start: () => this._startSession(),
1094
+ stop: (session) => this._stopSession(session)
1095
+ })), _define_property3(this, "_config", void 0), _define_property3(this, "taskScheduler", new FIFOScheduler()), _define_property3(this, "pushTrackDispatcher", new BulkRequestDispatcher(32)), _define_property3(this, "pullTrackDispatcher", new BulkRequestDispatcher(32)), _define_property3(this, "closeTrackDispatcher", new BulkRequestDispatcher(32));
1096
+ this._config = config;
1097
+ }
990
1098
  };
991
1099
  var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
992
1100
  setTimeout(reject, timeout);
@@ -1021,9 +1129,9 @@ var peerConnectionIsConnected = async (peerConnection) => {
1021
1129
 
1022
1130
  // src/calls/util/media.ts
1023
1131
  import { log as log3 } from "@dxos/log";
1024
- var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
1132
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
1025
1133
  var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1026
- deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);
1134
+ deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
1027
1135
  const firstDevice = deviceList[0];
1028
1136
  if (!firstDevice) {
1029
1137
  throw new Error("No devices found");
@@ -1033,7 +1141,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1033
1141
  var acquireTrack = async (device, constraints) => {
1034
1142
  const { deviceId, label } = device;
1035
1143
  log3.info(`requesting ${label}`, void 0, {
1036
- F: __dxlog_file3,
1144
+ F: __dxlog_file4,
1037
1145
  L: 23,
1038
1146
  S: void 0,
1039
1147
  C: (f, a) => f(...a)
@@ -1078,14 +1186,24 @@ var getScreenshare = async ({ contentHint }) => {
1078
1186
  // src/calls/speaking-monitor.ts
1079
1187
  import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
1080
1188
  import { Resource as Resource3 } from "@dxos/context";
1189
+ function _define_property4(obj, key, value) {
1190
+ if (key in obj) {
1191
+ Object.defineProperty(obj, key, {
1192
+ value,
1193
+ enumerable: true,
1194
+ configurable: true,
1195
+ writable: true
1196
+ });
1197
+ } else {
1198
+ obj[key] = value;
1199
+ }
1200
+ return obj;
1201
+ }
1081
1202
  var NOT_SPEAKING_AFTER = 500;
1082
1203
  var START_SPEAKING_THRESHOLD = 0.05;
1083
1204
  var CONTINUE_SPEAKING_THRESHOLD = 0.02;
1084
1205
  var MIN_EVENT_INTERVAL = 100;
1085
1206
  var SpeakingMonitor = class extends Resource3 {
1086
- constructor(_mediaStreamTrack) {
1087
- super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
1088
- }
1089
1207
  get isSpeaking() {
1090
1208
  return this._isSpeaking;
1091
1209
  }
@@ -1129,40 +1247,50 @@ var SpeakingMonitor = class extends Resource3 {
1129
1247
  this._lastEventTime = Date.now();
1130
1248
  this.speakingChanged.emit(this._isSpeaking);
1131
1249
  }
1250
+ constructor(_mediaStreamTrack) {
1251
+ super(), _define_property4(this, "_mediaStreamTrack", void 0), /**
1252
+ * Event that is emitted when the user starts or stops speaking.
1253
+ * It is debounced to prevent rapid state changes.
1254
+ */
1255
+ _define_property4(this, "speakingChanged", void 0), /**
1256
+ * Real state of the user speaking.
1257
+ */
1258
+ _define_property4(this, "_isSpeaking", void 0), _define_property4(this, "_lastEventTime", void 0), _define_property4(this, "_deferredUpdate", void 0), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
1259
+ }
1132
1260
  };
1133
1261
 
1134
1262
  // src/calls/media-manager.ts
1135
1263
  import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
1136
- import { cancelWithContext, Resource as Resource4 } from "@dxos/context";
1264
+ import { Resource as Resource4, cancelWithContext } from "@dxos/context";
1265
+ import { invariant as invariant4 } from "@dxos/invariant";
1137
1266
  import { log as log4 } from "@dxos/log";
1267
+ function _define_property5(obj, key, value) {
1268
+ if (key in obj) {
1269
+ Object.defineProperty(obj, key, {
1270
+ value,
1271
+ enumerable: true,
1272
+ configurable: true,
1273
+ writable: true
1274
+ });
1275
+ } else {
1276
+ obj[key] = value;
1277
+ }
1278
+ return obj;
1279
+ }
1138
1280
  function _ts_decorate2(decorators, target, key, desc) {
1139
1281
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1140
1282
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1141
1283
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1142
1284
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1143
1285
  }
1144
- var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
1286
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
1145
1287
  var VIDEO_WIDTH = 1280;
1146
1288
  var VIDEO_HEIGHT = 720;
1147
1289
  var MAX_WEB_CAM_FRAMERATE = 24;
1148
1290
  var MAX_WEB_CAM_BITRATE = 12e5;
1149
- var RETRY_INTERVAL = 500;
1150
- var USE_INAUDIBLE_AUDIO = false;
1291
+ var RETRY_INTERVAL = 100;
1292
+ var USE_INAUDIBLE_AUDIO = true;
1151
1293
  var MediaManager = class extends Resource4 {
1152
- constructor() {
1153
- super(...arguments);
1154
- this.stateUpdated = new Event3();
1155
- this._state = {
1156
- pulledVideoStreams: {},
1157
- pulledAudioTracks: {}
1158
- };
1159
- this._speakingMonitor = void 0;
1160
- this._trackToReconcile = [];
1161
- this._blackCanvasStreamTrack = void 0;
1162
- this._inaudibleAudioStreamTrack = void 0;
1163
- this._pushTracksTask = void 0;
1164
- this._pullTracksTask = void 0;
1165
- }
1166
1294
  get isSpeaking() {
1167
1295
  return this._speakingMonitor?.isSpeaking;
1168
1296
  }
@@ -1301,8 +1429,8 @@ var MediaManager = class extends Resource4 {
1301
1429
  }
1302
1430
  async _reconcilePulledMedia() {
1303
1431
  log4("reconciling tracks", void 0, {
1304
- F: __dxlog_file4,
1305
- L: 222,
1432
+ F: __dxlog_file5,
1433
+ L: 223,
1306
1434
  S: this,
1307
1435
  C: (f, a) => f(...a)
1308
1436
  });
@@ -1319,12 +1447,12 @@ var MediaManager = class extends Resource4 {
1319
1447
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
1320
1448
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1321
1449
  }, {
1322
- F: __dxlog_file4,
1323
- L: 241,
1450
+ F: __dxlog_file5,
1451
+ L: 242,
1324
1452
  S: this,
1325
1453
  C: (f, a) => f(...a)
1326
1454
  });
1327
- await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1455
+ const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1328
1456
  await Promise.all([
1329
1457
  ...audioTracksToClose,
1330
1458
  ...videoStreamsToClose
@@ -1333,55 +1461,102 @@ var MediaManager = class extends Resource4 {
1333
1461
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
1334
1462
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1335
1463
  }, {
1336
- F: __dxlog_file4,
1337
- L: 256,
1464
+ F: __dxlog_file5,
1465
+ L: 257,
1338
1466
  S: this,
1339
1467
  C: (f, a) => f(...a)
1340
1468
  });
1341
1469
  this.stateUpdated.emit(this._state);
1470
+ if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
1471
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1472
+ log4.info("retrying pull tracks", {
1473
+ tracksToPull
1474
+ }, {
1475
+ F: __dxlog_file5,
1476
+ L: 265,
1477
+ S: this,
1478
+ C: (f, a) => f(...a)
1479
+ });
1480
+ invariant4(this._pullTracksTask, void 0, {
1481
+ F: __dxlog_file5,
1482
+ L: 266,
1483
+ S: this,
1484
+ A: [
1485
+ "this._pullTracksTask",
1486
+ ""
1487
+ ]
1488
+ });
1489
+ this._pullTracksTask.schedule();
1490
+ }
1342
1491
  }
1343
1492
  async _pushTracks() {
1344
1493
  if (!this._state.peer?.isOpen) {
1345
1494
  return;
1346
1495
  }
1347
1496
  let updated = false;
1348
- const [pushedVideoTrack, pushedAudioTrack, pushedScreenshareTrack] = await Promise.all([
1349
- this._pushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1497
+ const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
1498
+ this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1350
1499
  {
1351
1500
  maxFramerate: MAX_WEB_CAM_FRAMERATE,
1352
1501
  maxBitrate: MAX_WEB_CAM_BITRATE
1353
1502
  }
1354
1503
  ]),
1355
- this._pushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1504
+ this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1356
1505
  {
1357
1506
  networkPriority: "high"
1358
1507
  }
1359
1508
  ]),
1360
- this._pushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1509
+ this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1361
1510
  ]);
1362
- if (pushedVideoTrack !== this._state.pushedVideoTrack) {
1363
- this._state.pushedVideoTrack = pushedVideoTrack;
1511
+ if (pushVideoResult.track !== this._state.pushedVideoTrack) {
1512
+ this._state.pushedVideoTrack = pushVideoResult.track;
1364
1513
  updated = true;
1365
1514
  }
1366
- if (pushedAudioTrack !== this._state.pushedAudioTrack) {
1367
- this._state.pushedAudioTrack = pushedAudioTrack;
1515
+ if (pushAudioResult.track !== this._state.pushedAudioTrack) {
1516
+ this._state.pushedAudioTrack = pushAudioResult.track;
1368
1517
  updated = true;
1369
1518
  }
1370
- if (pushedScreenshareTrack !== this._state.pushedScreenshareTrack) {
1371
- this._state.pushedScreenshareTrack = pushedScreenshareTrack;
1519
+ if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
1520
+ this._state.pushedScreenshareTrack = pushScreenshareResult.track;
1372
1521
  updated = true;
1373
1522
  }
1374
- if (!updated) {
1375
- return;
1523
+ const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
1524
+ if (updated) {
1525
+ this.stateUpdated.emit(this._state);
1526
+ }
1527
+ if (shouldRetry) {
1528
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1529
+ log4.info("retrying push tracks", {
1530
+ pushVideoResult,
1531
+ pushAudioResult,
1532
+ pushScreenshareResult
1533
+ }, {
1534
+ F: __dxlog_file5,
1535
+ L: 306,
1536
+ S: this,
1537
+ C: (f, a) => f(...a)
1538
+ });
1539
+ invariant4(this._pushTracksTask, void 0, {
1540
+ F: __dxlog_file5,
1541
+ L: 307,
1542
+ S: this,
1543
+ A: [
1544
+ "this._pushTracksTask",
1545
+ ""
1546
+ ]
1547
+ });
1548
+ this._pushTracksTask.schedule();
1376
1549
  }
1377
- this.stateUpdated.emit(this._state);
1378
1550
  }
1379
1551
  async _pullTrack(name) {
1380
1552
  const ctx = this._ctx.derive();
1381
1553
  try {
1382
1554
  const trackData = TrackNameCodec.decode(name);
1383
1555
  const track = await this._state.peer.pullTrack({
1384
- trackData,
1556
+ trackData: {
1557
+ ...trackData,
1558
+ mid: void 0
1559
+ },
1385
1560
  ctx
1386
1561
  });
1387
1562
  if (track?.readyState === "ended") {
@@ -1394,7 +1569,9 @@ var MediaManager = class extends Resource4 {
1394
1569
  ctx
1395
1570
  };
1396
1571
  ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
1397
- break;
1572
+ return {
1573
+ shouldRetry: false
1574
+ };
1398
1575
  }
1399
1576
  case "video": {
1400
1577
  const mediaStream = new MediaStream();
@@ -1408,43 +1585,68 @@ var MediaManager = class extends Resource4 {
1408
1585
  track.stop();
1409
1586
  delete this._state.pulledVideoStreams[name];
1410
1587
  });
1411
- break;
1588
+ return {
1589
+ shouldRetry: false
1590
+ };
1412
1591
  }
1413
1592
  default:
1414
1593
  throw new Error(`Invalid track kind: ${track?.kind}`);
1415
1594
  }
1416
1595
  } catch (err) {
1417
- log4.verbose("failed to pull track", {
1596
+ log4.info("failed to pull track", {
1418
1597
  err,
1419
1598
  name
1420
1599
  }, {
1421
- F: __dxlog_file4,
1422
- L: 326,
1600
+ F: __dxlog_file5,
1601
+ L: 343,
1423
1602
  S: this,
1424
1603
  C: (f, a) => f(...a)
1425
1604
  });
1426
1605
  void ctx.dispose();
1427
- await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1428
- log4.verbose("retrying pull track", {
1429
- name
1606
+ return {
1607
+ shouldRetry: true
1608
+ };
1609
+ }
1610
+ }
1611
+ async _maybePushTrack(track, previousTrack, encodings) {
1612
+ if (!track && !previousTrack) {
1613
+ return {
1614
+ track: void 0
1615
+ };
1616
+ }
1617
+ const ctx = this._ctx.derive();
1618
+ try {
1619
+ return {
1620
+ track: await this._state.peer.pushTrack({
1621
+ ctx,
1622
+ track: track ?? null,
1623
+ previousTrack,
1624
+ encodings
1625
+ })
1626
+ };
1627
+ } catch (err) {
1628
+ log4.info("failed to push track", {
1629
+ err,
1630
+ track,
1631
+ previousTrack,
1632
+ encodings
1430
1633
  }, {
1431
- F: __dxlog_file4,
1432
- L: 329,
1634
+ F: __dxlog_file5,
1635
+ L: 370,
1433
1636
  S: this,
1434
1637
  C: (f, a) => f(...a)
1435
1638
  });
1436
- this._pullTracksTask.schedule();
1639
+ void ctx.dispose();
1640
+ return {
1641
+ shouldRetry: true
1642
+ };
1437
1643
  }
1438
1644
  }
1439
- async _pushTrack(track, previousTrack, encodings) {
1440
- if (!track && !previousTrack) {
1441
- return;
1442
- }
1443
- return this._state.peer.pushTrack({
1444
- track: track ?? null,
1445
- previousTrack,
1446
- encodings
1447
- });
1645
+ constructor(...args) {
1646
+ super(...args), _define_property5(this, "stateUpdated", new Event3()), _define_property5(this, "_state", {
1647
+ pulledVideoStreams: {},
1648
+ pulledAudioTracks: {}
1649
+ }), _define_property5(this, "_speakingMonitor", void 0), _define_property5(this, "_trackToReconcile", []), _define_property5(this, "_blackCanvasStreamTrack", void 0), _define_property5(this, "_inaudibleAudioStreamTrack", void 0), _define_property5(this, "_pushTracksTask", void 0), _define_property5(this, "_pullTracksTask", void 0);
1448
1650
  }
1449
1651
  };
1450
1652
  _ts_decorate2([
@@ -1458,16 +1660,29 @@ _ts_decorate2([
1458
1660
  import { computed } from "@preact/signals-core";
1459
1661
  import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
1460
1662
  import { Resource as Resource5 } from "@dxos/context";
1461
- import { invariant as invariant3 } from "@dxos/invariant";
1663
+ import { invariant as invariant5 } from "@dxos/invariant";
1462
1664
  import { live } from "@dxos/live-object";
1463
1665
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
1666
+ function _define_property6(obj, key, value) {
1667
+ if (key in obj) {
1668
+ Object.defineProperty(obj, key, {
1669
+ value,
1670
+ enumerable: true,
1671
+ configurable: true,
1672
+ writable: true
1673
+ });
1674
+ } else {
1675
+ obj[key] = value;
1676
+ }
1677
+ return obj;
1678
+ }
1464
1679
  function _ts_decorate3(decorators, target, key, desc) {
1465
1680
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1466
1681
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1467
1682
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1468
1683
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1469
1684
  }
1470
- var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1685
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1471
1686
  var CallManager = class extends Resource5 {
1472
1687
  /** @reactive */
1473
1688
  get roomId() {
@@ -1547,31 +1762,6 @@ var CallManager = class extends Resource5 {
1547
1762
  turnScreenshareOff() {
1548
1763
  return this._mediaManager.turnScreenshareOff();
1549
1764
  }
1550
- // TODO(burdon): Can this be mocked?
1551
- constructor(_client) {
1552
- super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
1553
- call: {},
1554
- media: {
1555
- pulledAudioTracks: {},
1556
- pulledVideoStreams: {}
1557
- }
1558
- }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1559
- this._client.config.getOrThrow("runtime.services.edge.url");
1560
- const networkService = this._client.services.services.NetworkService;
1561
- invariant3(networkService, "network service not found", {
1562
- F: __dxlog_file5,
1563
- L: 159,
1564
- S: this,
1565
- A: [
1566
- "networkService",
1567
- "'network service not found'"
1568
- ]
1569
- });
1570
- this._swarmSynchronizer = new CallSwarmSynchronizer({
1571
- networkService
1572
- });
1573
- this._mediaManager = new MediaManager();
1574
- }
1575
1765
  async _open() {
1576
1766
  await this._mediaManager.open();
1577
1767
  await this._swarmSynchronizer.open();
@@ -1612,7 +1802,7 @@ var CallManager = class extends Resource5 {
1612
1802
  this.roomId && this.left.emit(this.roomId);
1613
1803
  }
1614
1804
  _onCallStateUpdated(state) {
1615
- const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self?.id)?.flatMap((user) => [
1805
+ const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self.id)?.flatMap((user) => [
1616
1806
  user.tracks?.video,
1617
1807
  user.tracks?.audio,
1618
1808
  user.tracks?.screenshare
@@ -1645,6 +1835,37 @@ var CallManager = class extends Resource5 {
1645
1835
  this._state.call = this._swarmSynchronizer._getState();
1646
1836
  this._state.media = this._mediaManager._getState();
1647
1837
  }
1838
+ // TODO(burdon): Can this be mocked?
1839
+ constructor(_client) {
1840
+ super(), _define_property6(this, "_client", void 0), _define_property6(this, "callStateUpdated", void 0), // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
1841
+ _define_property6(this, "mediaStateUpdated", void 0), _define_property6(this, "left", void 0), /**
1842
+ * Live object state. Is changed on internal events.
1843
+ * CAUTION: Do not change directly.
1844
+ */
1845
+ _define_property6(this, "_state", void 0), // TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
1846
+ _define_property6(this, "_raisedHandSignal", void 0), _define_property6(this, "_speakingSignal", void 0), _define_property6(this, "_joinedSignal", void 0), _define_property6(this, "_swarmSynchronizer", void 0), _define_property6(this, "_mediaManager", void 0), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
1847
+ call: {},
1848
+ media: {
1849
+ pulledAudioTracks: {},
1850
+ pulledVideoStreams: {}
1851
+ }
1852
+ }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1853
+ this._client.config.getOrThrow("runtime.services.edge.url");
1854
+ const networkService = this._client.services.services.NetworkService;
1855
+ invariant5(networkService, "network service not found", {
1856
+ F: __dxlog_file6,
1857
+ L: 159,
1858
+ S: this,
1859
+ A: [
1860
+ "networkService",
1861
+ "'network service not found'"
1862
+ ]
1863
+ });
1864
+ this._swarmSynchronizer = new CallSwarmSynchronizer({
1865
+ networkService
1866
+ });
1867
+ this._mediaManager = new MediaManager();
1868
+ }
1648
1869
  };
1649
1870
  _ts_decorate3([
1650
1871
  synchronized3
@@ -1667,4 +1888,4 @@ export {
1667
1888
  MediaManager,
1668
1889
  CallManager
1669
1890
  };
1670
- //# sourceMappingURL=chunk-IHDNQLLR.mjs.map
1891
+ //# sourceMappingURL=chunk-TIPIOH2J.mjs.map