@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-thread",
3
- "version": "0.8.4-main.67995b8",
3
+ "version": "0.8.4-main.c4373fc",
4
4
  "description": "DXOS Threads Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,16 +10,16 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
13
14
  "types": "./dist/types/src/index.d.ts",
14
15
  "browser": "./dist/lib/browser/index.mjs",
15
- "node": "./dist/lib/node-esm/index.mjs",
16
- "source": "./src/index.ts"
16
+ "node": "./dist/lib/node-esm/index.mjs"
17
17
  },
18
18
  "./types": {
19
+ "source": "./src/types/index.ts",
19
20
  "types": "./dist/types/src/types/index.d.ts",
20
21
  "browser": "./dist/lib/browser/types/index.mjs",
21
- "node": "./dist/lib/node-esm/types/index.mjs",
22
- "source": "./src/types/index.ts"
22
+ "node": "./dist/lib/node-esm/types/index.mjs"
23
23
  }
24
24
  },
25
25
  "types": "dist/types/src/index.d.ts",
@@ -35,77 +35,79 @@
35
35
  "src"
36
36
  ],
37
37
  "dependencies": {
38
- "@codemirror/language": "^6.10.3",
39
- "@codemirror/state": "^6.4.1",
40
- "@codemirror/view": "^6.34.1",
38
+ "@codemirror/language": "^6.11.3",
39
+ "@codemirror/state": "^6.5.2",
40
+ "@codemirror/view": "^6.38.4",
41
+ "@effect/ai": "0.29.1",
42
+ "@effect/experimental": "0.56.0",
41
43
  "@peermetrics/webrtc-stats": "5.7.1",
42
44
  "@preact-signals/safe-react": "^0.9.0",
43
- "@preact/signals-core": "^1.9.0",
45
+ "@preact/signals-core": "^1.12.1",
44
46
  "date-fns": "^3.3.1",
45
47
  "extendable-media-recorder": "^9.2.19",
46
48
  "extendable-media-recorder-wav-encoder": "^7.0.123",
47
49
  "md5-hex": "5.0.0",
48
- "react-resize-detector": "^12.0.2",
50
+ "react-resize-detector": "^11.0.1",
49
51
  "wavefile": "^11.0.0",
50
- "@dxos/app-framework": "0.8.4-main.67995b8",
51
- "@dxos/async": "0.8.4-main.67995b8",
52
- "@dxos/codec-protobuf": "0.8.4-main.67995b8",
53
- "@dxos/context": "0.8.4-main.67995b8",
54
- "@dxos/debug": "0.8.4-main.67995b8",
55
- "@dxos/display-name": "0.8.4-main.67995b8",
56
- "@dxos/echo": "0.8.4-main.67995b8",
57
- "@dxos/devtools": "0.8.4-main.67995b8",
58
- "@dxos/invariant": "0.8.4-main.67995b8",
59
- "@dxos/echo-schema": "0.8.4-main.67995b8",
60
- "@dxos/live-object": "0.8.4-main.67995b8",
61
- "@dxos/keys": "0.8.4-main.67995b8",
62
- "@dxos/local-storage": "0.8.4-main.67995b8",
63
- "@dxos/log": "0.8.4-main.67995b8",
64
- "@dxos/plugin-attention": "0.8.4-main.67995b8",
65
- "@dxos/plugin-client": "0.8.4-main.67995b8",
66
- "@dxos/plugin-deck": "0.8.4-main.67995b8",
67
- "@dxos/plugin-graph": "0.8.4-main.67995b8",
68
- "@dxos/plugin-markdown": "0.8.4-main.67995b8",
69
- "@dxos/protocols": "0.8.4-main.67995b8",
70
- "@dxos/plugin-observability": "0.8.4-main.67995b8",
71
- "@dxos/plugin-space": "0.8.4-main.67995b8",
72
- "@dxos/react-client": "0.8.4-main.67995b8",
73
- "@dxos/react-ui-attention": "0.8.4-main.67995b8",
74
- "@dxos/react-ui-dnd": "0.8.4-main.67995b8",
75
- "@dxos/react-ui-form": "0.8.4-main.67995b8",
76
- "@dxos/react-ui-sfx": "0.8.4-main.67995b8",
77
- "@dxos/react-ui-editor": "0.8.4-main.67995b8",
78
- "@dxos/react-ui-menu": "0.8.4-main.67995b8",
79
- "@dxos/react-ui-syntax-highlighter": "0.8.4-main.67995b8",
80
- "@dxos/react-ui-tabs": "0.8.4-main.67995b8",
81
- "@dxos/schema": "0.8.4-main.67995b8",
82
- "@dxos/react-ui-thread": "0.8.4-main.67995b8",
83
- "@dxos/util": "0.8.4-main.67995b8",
84
- "@dxos/react-ui-stack": "0.8.4-main.67995b8"
52
+ "@dxos/app-framework": "0.8.4-main.c4373fc",
53
+ "@dxos/assistant": "0.8.4-main.c4373fc",
54
+ "@dxos/codec-protobuf": "0.8.4-main.c4373fc",
55
+ "@dxos/context": "0.8.4-main.c4373fc",
56
+ "@dxos/async": "0.8.4-main.c4373fc",
57
+ "@dxos/debug": "0.8.4-main.c4373fc",
58
+ "@dxos/devtools": "0.8.4-main.c4373fc",
59
+ "@dxos/display-name": "0.8.4-main.c4373fc",
60
+ "@dxos/invariant": "0.8.4-main.c4373fc",
61
+ "@dxos/live-object": "0.8.4-main.c4373fc",
62
+ "@dxos/keys": "0.8.4-main.c4373fc",
63
+ "@dxos/local-storage": "0.8.4-main.c4373fc",
64
+ "@dxos/log": "0.8.4-main.c4373fc",
65
+ "@dxos/plugin-attention": "0.8.4-main.c4373fc",
66
+ "@dxos/plugin-client": "0.8.4-main.c4373fc",
67
+ "@dxos/plugin-deck": "0.8.4-main.c4373fc",
68
+ "@dxos/plugin-markdown": "0.8.4-main.c4373fc",
69
+ "@dxos/plugin-graph": "0.8.4-main.c4373fc",
70
+ "@dxos/plugin-observability": "0.8.4-main.c4373fc",
71
+ "@dxos/plugin-space": "0.8.4-main.c4373fc",
72
+ "@dxos/echo": "0.8.4-main.c4373fc",
73
+ "@dxos/protocols": "0.8.4-main.c4373fc",
74
+ "@dxos/react-client": "0.8.4-main.c4373fc",
75
+ "@dxos/react-ui-attention": "0.8.4-main.c4373fc",
76
+ "@dxos/react-ui-dnd": "0.8.4-main.c4373fc",
77
+ "@dxos/react-ui-editor": "0.8.4-main.c4373fc",
78
+ "@dxos/react-ui-menu": "0.8.4-main.c4373fc",
79
+ "@dxos/react-ui-stack": "0.8.4-main.c4373fc",
80
+ "@dxos/react-ui-form": "0.8.4-main.c4373fc",
81
+ "@dxos/react-ui-sfx": "0.8.4-main.c4373fc",
82
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.c4373fc",
83
+ "@dxos/react-ui-tabs": "0.8.4-main.c4373fc",
84
+ "@dxos/react-ui-thread": "0.8.4-main.c4373fc",
85
+ "@dxos/schema": "0.8.4-main.c4373fc",
86
+ "@dxos/util": "0.8.4-main.c4373fc"
85
87
  },
86
88
  "devDependencies": {
87
- "@effect-rx/rx-react": "0.38.0",
88
- "@effect/platform": "0.89.0",
89
- "@types/react": "~18.2.0",
90
- "@types/react-dom": "~18.2.0",
91
- "effect": "3.17.0",
92
- "react": "~18.2.0",
93
- "react-dom": "~18.2.0",
94
- "vite": "5.4.7",
95
- "@dxos/plugin-theme": "0.8.4-main.67995b8",
96
- "@dxos/random": "0.8.4-main.67995b8",
97
- "@dxos/react-ui": "0.8.4-main.67995b8",
98
- "@dxos/react-ui-theme": "0.8.4-main.67995b8",
99
- "@dxos/storybook-utils": "0.8.4-main.67995b8"
89
+ "@effect-rx/rx-react": "0.42.4",
90
+ "@effect/platform": "0.92.1",
91
+ "@types/react": "~19.2.2",
92
+ "@types/react-dom": "~19.2.1",
93
+ "effect": "3.18.3",
94
+ "react": "~19.2.0",
95
+ "react-dom": "~19.2.0",
96
+ "vite": "7.1.9",
97
+ "@dxos/plugin-theme": "0.8.4-main.c4373fc",
98
+ "@dxos/random": "0.8.4-main.c4373fc",
99
+ "@dxos/react-ui": "0.8.4-main.c4373fc",
100
+ "@dxos/react-ui-theme": "0.8.4-main.c4373fc",
101
+ "@dxos/storybook-utils": "0.8.4-main.c4373fc"
100
102
  },
101
103
  "peerDependencies": {
102
104
  "@effect-rx/rx-react": "^0.34.1",
103
105
  "@effect/platform": "^0.80.12",
104
106
  "effect": "^3.13.3",
105
- "react": "~18.2.0",
106
- "react-dom": "~18.2.0",
107
- "@dxos/react-ui": "0.8.4-main.67995b8",
108
- "@dxos/react-ui-theme": "0.8.4-main.67995b8"
107
+ "react": "^19.0.0",
108
+ "react-dom": "^19.0.0",
109
+ "@dxos/react-ui": "0.8.4-main.c4373fc",
110
+ "@dxos/react-ui-theme": "0.8.4-main.c4373fc"
109
111
  },
110
112
  "publishConfig": {
111
113
  "access": "public"
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';
5
+ import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from '@dxos/app-framework';
6
6
  import { Ref } from '@dxos/echo';
7
7
  import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
8
8
  import { MarkdownEvents } from '@dxos/plugin-markdown';
@@ -19,8 +19,9 @@ import {
19
19
  ReactRoot,
20
20
  ReactSurface,
21
21
  ThreadState,
22
+ Toolkit,
22
23
  } from './capabilities';
23
- import { meta, THREAD_ITEM } from './meta';
24
+ import { THREAD_ITEM, meta } from './meta';
24
25
  import { translations } from './translations';
25
26
  import { ChannelType, ThreadAction, ThreadType } from './types';
26
27
 
@@ -29,127 +30,132 @@ import { ChannelType, ThreadAction, ThreadType } from './types';
29
30
 
30
31
  // TODO(wittjosiah): Rename to ChatPlugin.
31
32
  // TODO(wittjosiah): Enabling comments should likely be factored out of this plugin but depend on it's capabilities.
32
- export const ThreadPlugin = () =>
33
- definePlugin(meta, [
34
- defineModule({
35
- id: `${meta.id}/module/call-manager`,
36
- activatesOn: ClientEvents.ClientReady,
37
- activate: CallManager,
38
- }),
39
- // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.
40
- // defineModule({
41
- // id: `${meta.id}/module/settings`,
42
- // activatesOn: Events.SetupSettings,
43
- // activate: ThreadSettings,
44
- // }),
45
- defineModule({
46
- id: `${meta.id}/module/state`,
47
- // TODO(wittjosiah): Does not integrate with settings store.
48
- // Should this be a different event?
49
- // Should settings store be renamed to be more generic?
50
- activatesOn: Events.SetupSettings,
51
- activate: ThreadState,
52
- }),
53
- defineModule({
54
- id: `${meta.id}/module/translations`,
55
- activatesOn: Events.SetupTranslations,
56
- activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),
57
- }),
58
- defineModule({
59
- id: `${meta.id}/module/metadata`,
60
- activatesOn: Events.SetupMetadata,
61
- activate: () => [
62
- contributes(Capabilities.Metadata, {
63
- id: ChannelType.typename,
64
- metadata: {
65
- icon: 'ph--hash--regular',
33
+ export const ThreadPlugin = definePlugin(meta, () => [
34
+ defineModule({
35
+ id: `${meta.id}/module/call-manager`,
36
+ activatesOn: ClientEvents.ClientReady,
37
+ activate: CallManager,
38
+ }),
39
+ // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.
40
+ // defineModule({
41
+ // id: `${meta.id}/module/settings`,
42
+ // activatesOn: Events.SetupSettings,
43
+ // activate: ThreadSettings,
44
+ // }),
45
+ defineModule({
46
+ id: `${meta.id}/module/state`,
47
+ // TODO(wittjosiah): Does not integrate with settings store.
48
+ // Should this be a different event?
49
+ // Should settings store be renamed to be more generic?
50
+ activatesOn: Events.SetupSettings,
51
+ activate: ThreadState,
52
+ }),
53
+ defineModule({
54
+ id: `${meta.id}/module/translations`,
55
+ activatesOn: Events.SetupTranslations,
56
+ activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),
57
+ }),
58
+ defineModule({
59
+ id: `${meta.id}/module/metadata`,
60
+ activatesOn: Events.SetupMetadata,
61
+ activate: () => [
62
+ contributes(Capabilities.Metadata, {
63
+ id: ChannelType.typename,
64
+ metadata: {
65
+ icon: 'ph--hash--regular',
66
+ },
67
+ }),
68
+ contributes(Capabilities.Metadata, {
69
+ id: ThreadType.typename,
70
+ metadata: {
71
+ // TODO(wittjosiah): Move out of metadata.
72
+ loadReferences: async (thread: ThreadType) => await Ref.Array.loadAll(thread.messages ?? []),
73
+ },
74
+ }),
75
+ contributes(Capabilities.Metadata, {
76
+ id: DataType.Message.typename,
77
+ metadata: {
78
+ // TODO(wittjosiah): Move out of metadata.
79
+ loadReferences: (message: DataType.Message) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),
80
+ },
81
+ }),
82
+ contributes(Capabilities.Metadata, {
83
+ id: THREAD_ITEM,
84
+ metadata: {
85
+ parse: (item: ThreadType, type: string) => {
86
+ switch (type) {
87
+ case 'node':
88
+ return { id: item.id, label: item.name, data: item };
89
+ case 'object':
90
+ return item;
91
+ case 'view-object':
92
+ return { id: `${item.id}-view`, object: item };
93
+ }
66
94
  },
95
+ },
96
+ }),
97
+ ],
98
+ }),
99
+ defineModule({
100
+ id: `${meta.id}/module/object-form`,
101
+ activatesOn: ClientEvents.SetupSchema,
102
+ activate: () =>
103
+ contributes(
104
+ SpaceCapabilities.ObjectForm,
105
+ defineObjectForm({
106
+ objectSchema: ChannelType,
107
+ getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),
67
108
  }),
68
- contributes(Capabilities.Metadata, {
69
- id: ThreadType.typename,
70
- metadata: {
71
- // TODO(wittjosiah): Move out of metadata.
72
- loadReferences: async (thread: ThreadType) => await Ref.Array.loadAll(thread.messages ?? []),
73
- },
74
- }),
75
- contributes(Capabilities.Metadata, {
76
- id: DataType.Message.typename,
77
- metadata: {
78
- // TODO(wittjosiah): Move out of metadata.
79
- loadReferences: (message: DataType.Message) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),
80
- },
81
- }),
82
- contributes(Capabilities.Metadata, {
83
- id: THREAD_ITEM,
84
- metadata: {
85
- parse: (item: ThreadType, type: string) => {
86
- switch (type) {
87
- case 'node':
88
- return { id: item.id, label: item.name, data: item };
89
- case 'object':
90
- return item;
91
- case 'view-object':
92
- return { id: `${item.id}-view`, object: item };
93
- }
94
- },
95
- },
96
- }),
97
- ],
98
- }),
99
- defineModule({
100
- id: `${meta.id}/module/object-form`,
101
- activatesOn: ClientEvents.SetupSchema,
102
- activate: () =>
103
- contributes(
104
- SpaceCapabilities.ObjectForm,
105
- defineObjectForm({
106
- objectSchema: ChannelType,
107
- getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),
108
- }),
109
- ),
110
- }),
111
- defineModule({
112
- id: `${meta.id}/module/schema`,
113
- activatesOn: ClientEvents.SetupSchema,
114
- activate: () =>
115
- contributes(ClientCapabilities.Schema, [AnchoredTo, ThreadType, DataType.Message, DataType.MessageV1]),
116
- }),
117
- defineModule({
118
- id: `${meta.id}/module/migration`,
119
- activatesOn: ClientEvents.SetupMigration,
120
- activate: () => contributes(ClientCapabilities.Migration, [DataType.MessageV1ToV2]),
121
- }),
122
- defineModule({
123
- id: `${meta.id}/module/on-space-created`,
124
- activatesOn: SpaceEvents.SpaceCreated,
125
- activate: () =>
126
- contributes(SpaceCapabilities.OnSpaceCreated, ({ space, rootCollection }) =>
127
- createIntent(ThreadAction.OnSpaceCreated, { space, rootCollection }),
128
- ),
129
- }),
130
- defineModule({
131
- id: `${meta.id}/module/markdown`,
132
- activatesOn: MarkdownEvents.SetupExtensions,
133
- activate: Markdown,
134
- }),
135
- defineModule({
136
- id: `${meta.id}/module/react-root`,
137
- activatesOn: Events.Startup,
138
- activate: ReactRoot,
139
- }),
140
- defineModule({
141
- id: `${meta.id}/module/react-surface`,
142
- activatesOn: Events.SetupReactSurface,
143
- activate: ReactSurface,
144
- }),
145
- defineModule({
146
- id: `${meta.id}/module/intent-resolver`,
147
- activatesOn: Events.SetupIntentResolver,
148
- activate: IntentResolver,
149
- }),
150
- defineModule({
151
- id: `${meta.id}/module/app-graph-builder`,
152
- activatesOn: Events.SetupAppGraph,
153
- activate: AppGraphBuilder,
154
- }),
155
- ]);
109
+ ),
110
+ }),
111
+ defineModule({
112
+ id: `${meta.id}/module/schema`,
113
+ activatesOn: ClientEvents.SetupSchema,
114
+ activate: () =>
115
+ contributes(ClientCapabilities.Schema, [AnchoredTo, ThreadType, DataType.Message, DataType.MessageV1]),
116
+ }),
117
+ defineModule({
118
+ id: `${meta.id}/module/migration`,
119
+ activatesOn: ClientEvents.SetupMigration,
120
+ activate: () => contributes(ClientCapabilities.Migration, [DataType.MessageV1ToV2]),
121
+ }),
122
+ defineModule({
123
+ id: `${meta.id}/module/on-space-created`,
124
+ activatesOn: SpaceEvents.SpaceCreated,
125
+ activate: () =>
126
+ contributes(SpaceCapabilities.onCreateSpace, ({ space, rootCollection }) =>
127
+ createIntent(ThreadAction.onCreateSpace, { space, rootCollection }),
128
+ ),
129
+ }),
130
+ defineModule({
131
+ id: `${meta.id}/module/markdown`,
132
+ activatesOn: MarkdownEvents.SetupExtensions,
133
+ activate: Markdown,
134
+ }),
135
+ defineModule({
136
+ id: `${meta.id}/module/react-root`,
137
+ activatesOn: Events.Startup,
138
+ activate: ReactRoot,
139
+ }),
140
+ defineModule({
141
+ id: `${meta.id}/module/react-surface`,
142
+ activatesOn: Events.SetupReactSurface,
143
+ activate: ReactSurface,
144
+ }),
145
+ defineModule({
146
+ id: `${meta.id}/module/intent-resolver`,
147
+ activatesOn: Events.SetupIntentResolver,
148
+ activate: IntentResolver,
149
+ }),
150
+ defineModule({
151
+ id: `${meta.id}/module/app-graph-builder`,
152
+ activatesOn: Events.SetupAppGraph,
153
+ activate: AppGraphBuilder,
154
+ }),
155
+ defineModule({
156
+ id: `${meta.id}/module/toolkit`,
157
+ // TODO(wittjosiah): Shouldn't use the startup event.
158
+ activatesOn: Events.Startup,
159
+ activate: Toolkit,
160
+ }),
161
+ ]);
@@ -12,7 +12,7 @@ import { live } from '@dxos/live-object';
12
12
  import { type Tracks } from '@dxos/protocols/proto/dxos/edge/calls';
13
13
  import { isNonNullable } from '@dxos/util';
14
14
 
15
- import { CallSwarmSynchronizer, type CallState } from './call-swarm-synchronizer';
15
+ import { type CallState, CallSwarmSynchronizer } from './call-swarm-synchronizer';
16
16
  import { MediaManager, type MediaState } from './media-manager';
17
17
  import { type ActivityState, CALLS_URL, type EncodedTrackName, TrackNameCodec, type UserState } from './types';
18
18
 
@@ -210,7 +210,7 @@ export class CallManager extends Resource {
210
210
 
211
211
  private _onCallStateUpdated(state: CallState): void {
212
212
  const tracksToPull = state.users
213
- ?.filter((user) => user.joined && user.id !== state.self?.id)
213
+ ?.filter((user) => user.joined && user.id !== state.self!.id)
214
214
  ?.flatMap((user) => [user.tracks?.video, user.tracks?.audio, user.tracks?.screenshare])
215
215
  .filter(isNonNullable);
216
216
  this._mediaManager._schedulePullTracks(tracksToPull as EncodedTrackName[]);
@@ -17,7 +17,7 @@ import { type Device, type NetworkService } from '@dxos/protocols/proto/dxos/cli
17
17
  import { ConnectionState, type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';
18
18
  import { isNonNullable } from '@dxos/util';
19
19
 
20
- import { codec, type ActivityState, type UserState } from './types';
20
+ import { type ActivityState, type UserState, codec } from './types';
21
21
 
22
22
  export type CallState = {
23
23
  /**
@@ -3,11 +3,12 @@
3
3
  //
4
4
 
5
5
  import { DeferredTask, Event, sleep, synchronized } from '@dxos/async';
6
- import { cancelWithContext, type Context, Resource } from '@dxos/context';
6
+ import { type Context, Resource, cancelWithContext } from '@dxos/context';
7
+ import { invariant } from '@dxos/invariant';
7
8
  import { log } from '@dxos/log';
8
9
 
9
10
  import { SpeakingMonitor } from './speaking-monitor';
10
- import { TrackNameCodec, type EncodedTrackName, type TrackObject } from './types';
11
+ import { type EncodedTrackName, TrackNameCodec, type TrackObject } from './types';
11
12
  import {
12
13
  type CallsServiceConfig,
13
14
  CallsServicePeer,
@@ -48,13 +49,13 @@ const VIDEO_WIDTH = 1280;
48
49
  const VIDEO_HEIGHT = 720;
49
50
  const MAX_WEB_CAM_FRAMERATE = 24;
50
51
  const MAX_WEB_CAM_BITRATE = 120_0000;
51
- const RETRY_INTERVAL = 500;
52
+ const RETRY_INTERVAL = 100;
52
53
 
53
54
  export type MediaManagerParams = {
54
55
  serviceConfig: CallsServiceConfig;
55
56
  };
56
57
 
57
- const USE_INAUDIBLE_AUDIO = false;
58
+ const USE_INAUDIBLE_AUDIO = true;
58
59
 
59
60
  export class MediaManager extends Resource {
60
61
  public readonly stateUpdated = new Event<MediaState>();
@@ -248,7 +249,7 @@ export class MediaManager extends Resource {
248
249
  });
249
250
 
250
251
  // Pull new tracks.
251
- await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
252
+ const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
252
253
 
253
254
  // Close old tracks.
254
255
  await Promise.all([...audioTracksToClose, ...videoStreamsToClose].map(([_, { ctx }]) => ctx.dispose()));
@@ -258,6 +259,13 @@ export class MediaManager extends Resource {
258
259
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams),
259
260
  });
260
261
  this.stateUpdated.emit(this._state);
262
+
263
+ if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
264
+ await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));
265
+ log.info('retrying pull tracks', { tracksToPull });
266
+ invariant(this._pullTracksTask);
267
+ this._pullTracksTask.schedule();
268
+ }
261
269
  }
262
270
 
263
271
  private async _pushTracks(): Promise<void> {
@@ -266,38 +274,47 @@ export class MediaManager extends Resource {
266
274
  }
267
275
 
268
276
  let updated = false;
269
- const [pushedVideoTrack, pushedAudioTrack, pushedScreenshareTrack] = await Promise.all([
270
- this._pushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
277
+ const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
278
+ this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
271
279
  { maxFramerate: MAX_WEB_CAM_FRAMERATE, maxBitrate: MAX_WEB_CAM_BITRATE },
272
280
  ]),
273
- this._pushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [{ networkPriority: 'high' }]),
274
- this._pushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack),
281
+ this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [{ networkPriority: 'high' }]),
282
+ this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack),
275
283
  ]);
276
284
 
277
- if (pushedVideoTrack !== this._state.pushedVideoTrack) {
278
- this._state.pushedVideoTrack = pushedVideoTrack;
285
+ if (pushVideoResult.track !== this._state.pushedVideoTrack) {
286
+ this._state.pushedVideoTrack = pushVideoResult.track;
279
287
  updated = true;
280
288
  }
281
- if (pushedAudioTrack !== this._state.pushedAudioTrack) {
282
- this._state.pushedAudioTrack = pushedAudioTrack;
289
+ if (pushAudioResult.track !== this._state.pushedAudioTrack) {
290
+ this._state.pushedAudioTrack = pushAudioResult.track;
283
291
  updated = true;
284
292
  }
285
- if (pushedScreenshareTrack !== this._state.pushedScreenshareTrack) {
286
- this._state.pushedScreenshareTrack = pushedScreenshareTrack;
293
+ if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
294
+ this._state.pushedScreenshareTrack = pushScreenshareResult.track;
287
295
  updated = true;
288
296
  }
289
- if (!updated) {
290
- return;
297
+
298
+ const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
299
+
300
+ if (updated) {
301
+ this.stateUpdated.emit(this._state);
291
302
  }
292
303
 
293
- this.stateUpdated.emit(this._state);
304
+ if (shouldRetry) {
305
+ await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));
306
+ log.info('retrying push tracks', { pushVideoResult, pushAudioResult, pushScreenshareResult });
307
+ invariant(this._pushTracksTask);
308
+ this._pushTracksTask.schedule();
309
+ }
294
310
  }
295
311
 
296
- private async _pullTrack(name: EncodedTrackName): Promise<void> {
312
+ private async _pullTrack(name: EncodedTrackName): Promise<{ shouldRetry: boolean }> {
297
313
  const ctx = this._ctx.derive();
298
314
  try {
299
315
  const trackData = TrackNameCodec.decode(name);
300
- const track = await this._state.peer!.pullTrack({ trackData, ctx });
316
+ // We need to set mid here to `undefined`, because mid is peer specific.
317
+ const track = await this._state.peer!.pullTrack({ trackData: { ...trackData, mid: undefined }, ctx });
301
318
  if (track?.readyState === 'ended') {
302
319
  throw new Error('Pulled track ended immediately');
303
320
  }
@@ -306,7 +323,7 @@ export class MediaManager extends Resource {
306
323
  case 'audio': {
307
324
  this._state.pulledAudioTracks[name] = { track, ctx };
308
325
  ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
309
- break;
326
+ return { shouldRetry: false };
310
327
  }
311
328
  case 'video': {
312
329
  const mediaStream = new MediaStream();
@@ -317,33 +334,42 @@ export class MediaManager extends Resource {
317
334
  track.stop();
318
335
  delete this._state.pulledVideoStreams[name];
319
336
  });
320
- break;
337
+ return { shouldRetry: false };
321
338
  }
322
339
  default:
323
340
  throw new Error(`Invalid track kind: ${track?.kind}`);
324
341
  }
325
342
  } catch (err) {
326
- log.verbose('failed to pull track', { err, name });
343
+ log.info('failed to pull track', { err, name });
327
344
  void ctx.dispose();
328
- await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));
329
- log.verbose('retrying pull track', { name });
330
- this._pullTracksTask!.schedule();
345
+ return { shouldRetry: true };
331
346
  }
332
347
  }
333
348
 
334
- private async _pushTrack(
349
+ private async _maybePushTrack(
335
350
  track?: MediaStreamTrack,
336
351
  previousTrack?: TrackObject,
337
352
  encodings?: RTCRtpEncodingParameters[],
338
- ): Promise<TrackObject | undefined> {
353
+ ): Promise<{ track?: TrackObject; shouldRetry?: boolean }> {
339
354
  if (!track && !previousTrack) {
340
- return;
355
+ return { track: undefined };
341
356
  }
342
357
 
343
- return this._state.peer!.pushTrack({
344
- track: track ?? null,
345
- previousTrack,
346
- encodings,
347
- });
358
+ const ctx = this._ctx.derive();
359
+
360
+ try {
361
+ return {
362
+ track: await this._state.peer!.pushTrack({
363
+ ctx,
364
+ track: track ?? null,
365
+ previousTrack,
366
+ encodings,
367
+ }),
368
+ };
369
+ } catch (err) {
370
+ log.info('failed to push track', { err, track, previousTrack, encodings });
371
+ void ctx.dispose();
372
+ return { shouldRetry: true };
373
+ }
348
374
  }
349
375
  }