@dxos/plugin-thread 0.8.3 → 0.8.4-main.1f223c7

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 (320) hide show
  1. package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-EXNNREYB.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-OY7R7EJP.mjs → app-graph-builder-FHAOPO57.mjs} +8 -8
  4. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-APQAZWHT.mjs → call-manager-RMPTWSTF.mjs} +6 -5
  6. package/dist/lib/browser/call-manager-RMPTWSTF.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-R5MDLUPC.mjs → chunk-4APCDRSH.mjs} +3 -3
  8. package/dist/lib/browser/{chunk-R5MDLUPC.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-XZKBN3NS.mjs → chunk-7W7QK5ZP.mjs} +253 -250
  10. package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-IIUTBDVB.mjs → chunk-EV4JWI7L.mjs} +2 -2
  12. package/dist/lib/browser/chunk-G4CNILRR.mjs +23 -0
  13. package/dist/lib/browser/{chunk-6NBVNXTM.mjs.map → chunk-G4CNILRR.mjs.map} +3 -3
  14. package/dist/lib/browser/{chunk-JKQUJOTX.mjs → chunk-GERVMFQW.mjs} +2 -2
  15. package/dist/lib/browser/{chunk-AEXWNS6Z.mjs → chunk-KTWYVC5X.mjs} +34 -15
  16. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-TAFSCSUR.mjs → chunk-PBMNFG3B.mjs} +97 -72
  18. package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-RI3Z6MK3.mjs +181 -0
  20. package/dist/lib/browser/chunk-RI3Z6MK3.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-XYUJXHYV.mjs +106 -0
  22. package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-4H4A264L.mjs → chunk-ZCEU5K23.mjs} +490 -308
  24. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-PG5CTFKK.mjs → chunk-ZH2WPTNP.mjs} +226 -158
  26. package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +7 -0
  27. package/dist/lib/browser/index.mjs +49 -44
  28. package/dist/lib/browser/index.mjs.map +3 -3
  29. package/dist/lib/browser/{intent-resolver-FK2MDVDT.mjs → intent-resolver-J7OCP2P6.mjs} +90 -16
  30. package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +7 -0
  31. package/dist/lib/browser/{markdown-TE5SWWNJ.mjs → markdown-Z677YORA.mjs} +8 -8
  32. package/dist/lib/browser/markdown-Z677YORA.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/react-root-XKOD4KRB.mjs +28 -0
  35. package/dist/lib/browser/{react-surface-VXUJKSOG.mjs → react-surface-GVGZRBDK.mjs} +12 -11
  36. package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +7 -0
  37. package/dist/lib/browser/{settings-RB2RSLXV.mjs → settings-GRKEID73.mjs} +4 -4
  38. package/dist/lib/browser/{state-RKL5MSDP.mjs → state-2T4KDWBX.mjs} +4 -4
  39. package/dist/lib/browser/{state-RKL5MSDP.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  40. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +80 -0
  41. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +2 -2
  43. package/dist/lib/node-esm/ChannelContainer-KQQEZWUN.mjs +17 -0
  44. package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs → ChatContainer-QVQKFBWA.mjs} +6 -5
  45. package/dist/lib/node-esm/{app-graph-builder-BAHBHYWI.mjs → app-graph-builder-XEYWX5FC.mjs} +8 -8
  46. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +7 -0
  47. package/dist/lib/node-esm/{call-manager-UUYXLF4T.mjs → call-manager-QAREJFVX.mjs} +6 -5
  48. package/dist/lib/node-esm/call-manager-QAREJFVX.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs +108 -0
  50. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-4T45PCKP.mjs +25 -0
  52. package/dist/lib/node-esm/{chunk-O63QJPQX.mjs.map → chunk-4T45PCKP.mjs.map} +3 -3
  53. package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs → chunk-57XR3LEF.mjs} +2 -2
  54. package/dist/lib/node-esm/{chunk-P6RLFCNT.mjs → chunk-DKCQCENK.mjs} +97 -72
  55. package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs → chunk-GRLRWTRU.mjs} +2 -2
  57. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs +182 -0
  58. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-UZWVVFT3.mjs → chunk-LE2LIYGX.mjs} +226 -158
  60. package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-UJMPYKT3.mjs → chunk-P6E247RF.mjs} +34 -15
  62. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs → chunk-PYTVBN5J.mjs} +3 -3
  64. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  65. package/dist/lib/node-esm/{chunk-2RNIPFDA.mjs → chunk-SNKFZQST.mjs} +253 -250
  66. package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-WXNPD542.mjs → chunk-TIPIOH2J.mjs} +489 -308
  68. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +49 -44
  70. package/dist/lib/node-esm/index.mjs.map +3 -3
  71. package/dist/lib/node-esm/{intent-resolver-BU73VYW3.mjs → intent-resolver-SR2LW4HF.mjs} +90 -16
  72. package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +7 -0
  73. package/dist/lib/node-esm/{markdown-HJUWNBLS.mjs → markdown-FL4IXLRP.mjs} +8 -8
  74. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +7 -0
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-root-RUXOAQNW.mjs → react-root-4JWDRIQB.mjs} +12 -11
  77. package/dist/lib/{browser/react-root-NK3A4VG7.mjs.map → node-esm/react-root-4JWDRIQB.mjs.map} +1 -1
  78. package/dist/lib/node-esm/{react-surface-ELXFYKP6.mjs → react-surface-WLQUVRAX.mjs} +12 -11
  79. package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +7 -0
  80. package/dist/lib/node-esm/{settings-EA7DFSM6.mjs → settings-F2ODVNNW.mjs} +4 -4
  81. package/dist/lib/node-esm/{state-6AUTNROZ.mjs → state-62TQKQVB.mjs} +4 -4
  82. package/dist/lib/node-esm/{state-6AUTNROZ.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  83. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +81 -0
  84. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +7 -0
  85. package/dist/lib/node-esm/types/index.mjs +2 -2
  86. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  87. package/dist/types/src/calls/call-manager.d.ts +1 -1
  88. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  89. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  90. package/dist/types/src/calls/media-manager.d.ts +1 -1
  91. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  92. package/dist/types/src/calls/types.d.ts +1 -1
  93. package/dist/types/src/calls/types.d.ts.map +1 -1
  94. package/dist/types/src/calls/util/calls-service.d.ts +8 -3
  95. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  96. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  97. package/dist/types/src/calls-service.stories.d.ts +24 -0
  98. package/dist/types/src/calls-service.stories.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/call-manager.d.ts +1 -1
  102. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  104. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/index.d.ts +11 -10
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  110. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  112. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +1 -1
  115. package/dist/types/src/capabilities/state.d.ts +2 -2
  116. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  118. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  119. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  120. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  121. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  122. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  123. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  124. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  125. package/dist/types/src/components/ChannelContainer.stories.d.ts +89 -4
  126. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Chat.stories.d.ts +90 -3
  128. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ChatContainer.d.ts +2 -2
  130. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  131. package/dist/types/src/components/Comments.stories.d.ts +156 -3
  132. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/CommentsContainer.d.ts +4 -4
  134. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/CommentsThreadContainer.d.ts +14 -0
  136. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  138. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  139. package/dist/types/src/components/Media/VideoObject.stories.d.ts +15 -3
  140. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/MessageContainer.d.ts +4 -1
  142. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  143. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  144. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  145. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +154 -2
  146. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +156 -3
  148. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  150. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  151. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  152. package/dist/types/src/components/index.d.ts +1 -1
  153. package/dist/types/src/components/index.d.ts.map +1 -1
  154. package/dist/types/src/components/testing.d.ts +1 -0
  155. package/dist/types/src/components/testing.d.ts.map +1 -1
  156. package/dist/types/src/extensions/threads.d.ts +2 -2
  157. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  158. package/dist/types/src/hooks/index.d.ts +3 -0
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  161. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
  163. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
  165. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
  166. package/dist/types/src/testing/stories.d.ts.map +1 -1
  167. package/dist/types/src/translations.d.ts +76 -194
  168. package/dist/types/src/translations.d.ts.map +1 -1
  169. package/dist/types/src/types/schema.d.ts +125 -81
  170. package/dist/types/src/types/schema.d.ts.map +1 -1
  171. package/dist/types/src/types/types.d.ts +270 -139
  172. package/dist/types/src/types/types.d.ts.map +1 -1
  173. package/dist/types/src/util.d.ts +17 -2
  174. package/dist/types/src/util.d.ts.map +1 -1
  175. package/dist/types/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +56 -53
  177. package/src/ThreadPlugin.tsx +16 -24
  178. package/src/calls/call-manager.ts +8 -4
  179. package/src/calls/call-swarm-synchronizer.ts +1 -1
  180. package/src/calls/media-manager.ts +70 -37
  181. package/src/calls/types.ts +8 -4
  182. package/src/calls/util/calls-service.ts +72 -18
  183. package/src/calls/util/stub-media-streams.ts +62 -8
  184. package/src/calls-service.stories.tsx +232 -0
  185. package/src/capabilities/app-graph-builder.ts +8 -5
  186. package/src/capabilities/call-manager.ts +3 -2
  187. package/src/capabilities/capabilities.ts +2 -2
  188. package/src/capabilities/index.ts +1 -0
  189. package/src/capabilities/intent-resolver.ts +60 -8
  190. package/src/capabilities/markdown.ts +4 -3
  191. package/src/capabilities/react-surface.tsx +5 -4
  192. package/src/capabilities/state.ts +2 -1
  193. package/src/capabilities/toolkit.ts +78 -0
  194. package/src/components/Call/Call.tsx +4 -3
  195. package/src/components/Call/Toolbar.tsx +8 -8
  196. package/src/components/CallDebugPanel.tsx +110 -51
  197. package/src/components/CallSidebar.tsx +2 -1
  198. package/src/components/ChannelContainer.stories.tsx +11 -10
  199. package/src/components/ChannelContainer.tsx +13 -11
  200. package/src/components/Chat.stories.tsx +29 -27
  201. package/src/components/ChatContainer.tsx +20 -15
  202. package/src/components/Comments.stories.tsx +52 -41
  203. package/src/components/CommentsContainer.tsx +17 -11
  204. package/src/components/{CommentContainer.tsx → CommentsThreadContainer.tsx} +53 -82
  205. package/src/components/Lobby/Lobby.tsx +1 -1
  206. package/src/components/Media/VideoObject.stories.tsx +30 -27
  207. package/src/components/MessageContainer.tsx +65 -47
  208. package/src/components/Participant/Participant.tsx +13 -7
  209. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  210. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +7 -6
  211. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
  212. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  213. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +4 -4
  214. package/src/components/ThreadComplementary.tsx +40 -10
  215. package/src/components/ThreadSettings.tsx +4 -4
  216. package/src/components/command-extension.ts +5 -2
  217. package/src/components/index.ts +1 -1
  218. package/src/components/testing.ts +24 -2
  219. package/src/extensions/threads.ts +6 -6
  220. package/src/hooks/index.ts +3 -0
  221. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  222. package/src/hooks/useDebugMode.ts +1 -1
  223. package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
  224. package/src/hooks/useVideoStreamTrack.tsx +36 -0
  225. package/src/testing/stories.ts +7 -3
  226. package/src/translations.ts +14 -9
  227. package/src/types/types.ts +28 -11
  228. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  229. package/src/typings.d.ts +8 -0
  230. package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
  231. package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
  232. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +0 -7
  233. package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-5P5BH5GE.mjs +0 -88
  236. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
  238. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
  242. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +0 -7
  243. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +0 -7
  244. package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
  245. package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +0 -7
  246. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
  247. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
  248. package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
  249. package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
  250. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
  251. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
  252. package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
  253. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
  254. package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
  255. package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
  256. package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
  257. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
  258. package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
  259. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
  260. package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
  261. package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
  262. package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
  263. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
  264. package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
  265. package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
  266. package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
  267. package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
  268. package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
  269. package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
  270. package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
  271. package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
  272. package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
  273. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
  274. package/dist/lib/node/index.cjs +0 -310
  275. package/dist/lib/node/index.cjs.map +0 -7
  276. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
  277. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
  278. package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
  279. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
  280. package/dist/lib/node/meta.json +0 -1
  281. package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
  282. package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
  283. package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
  284. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
  285. package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
  286. package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
  287. package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
  288. package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
  289. package/dist/lib/node/types/index.cjs +0 -38
  290. package/dist/lib/node/types/index.cjs.map +0 -7
  291. package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
  292. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +0 -7
  293. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-O3V45YJP.mjs +0 -90
  296. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
  298. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
  302. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +0 -7
  303. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +0 -7
  304. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +0 -7
  305. package/dist/types/src/components/CommentContainer.d.ts +0 -13
  306. package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
  307. package/dist/types/src/peers.stories.d.ts +0 -11
  308. package/dist/types/src/peers.stories.d.ts.map +0 -1
  309. package/src/peers.stories.tsx +0 -189
  310. /package/dist/lib/browser/{ChannelContainer-PKFBVENP.mjs.map → ChannelContainer-4PYFOIDK.mjs.map} +0 -0
  311. /package/dist/lib/browser/{ChatContainer-RSOKYAMK.mjs.map → ChatContainer-EXNNREYB.mjs.map} +0 -0
  312. /package/dist/lib/browser/{chunk-IIUTBDVB.mjs.map → chunk-EV4JWI7L.mjs.map} +0 -0
  313. /package/dist/lib/browser/{chunk-JKQUJOTX.mjs.map → chunk-GERVMFQW.mjs.map} +0 -0
  314. /package/dist/lib/{node-esm/react-root-RUXOAQNW.mjs.map → browser/react-root-XKOD4KRB.mjs.map} +0 -0
  315. /package/dist/lib/browser/{settings-RB2RSLXV.mjs.map → settings-GRKEID73.mjs.map} +0 -0
  316. /package/dist/lib/node-esm/{ChannelContainer-O4QJII2P.mjs.map → ChannelContainer-KQQEZWUN.mjs.map} +0 -0
  317. /package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs.map → ChatContainer-QVQKFBWA.mjs.map} +0 -0
  318. /package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs.map → chunk-57XR3LEF.mjs.map} +0 -0
  319. /package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs.map → chunk-GRLRWTRU.mjs.map} +0 -0
  320. /package/dist/lib/node-esm/{settings-EA7DFSM6.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
@@ -1,6 +1,13 @@
1
- // packages/plugins/plugin-thread/src/calls/types.ts
1
+ import {
2
+ createBlackCanvasStreamTrack,
3
+ createInaudibleAudioStreamTrack
4
+ } from "./chunk-XYUJXHYV.mjs";
5
+
6
+ // src/calls/types.ts
7
+ import { invariant } from "@dxos/invariant";
2
8
  import { buf } from "@dxos/protocols/buf";
3
9
  import { UserStateSchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
10
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/types.ts";
4
11
  var CALLS_URL = "https://calls-service.dxos.workers.dev";
5
12
  var codec = {
6
13
  encode: (message) => {
@@ -12,54 +19,80 @@ var codec = {
12
19
  };
13
20
  var TrackNameCodec = {
14
21
  encode: (trackData) => {
15
- return trackData.sessionId + "/" + trackData.trackName;
22
+ invariant(trackData.sessionId, void 0, {
23
+ F: __dxlog_file,
24
+ L: 65,
25
+ S: void 0,
26
+ A: [
27
+ "trackData.sessionId",
28
+ ""
29
+ ]
30
+ });
31
+ invariant(trackData.trackName, void 0, {
32
+ F: __dxlog_file,
33
+ L: 66,
34
+ S: void 0,
35
+ A: [
36
+ "trackData.trackName",
37
+ ""
38
+ ]
39
+ });
40
+ invariant(trackData.mid, void 0, {
41
+ F: __dxlog_file,
42
+ L: 67,
43
+ S: void 0,
44
+ A: [
45
+ "trackData.mid",
46
+ ""
47
+ ]
48
+ });
49
+ return trackData.sessionId + "/" + trackData.trackName + "/" + trackData.mid;
16
50
  },
17
51
  decode: (name) => {
18
- const [sessionId, trackName] = name.split("/");
52
+ const [sessionId, trackName, mid] = name.split("/");
19
53
  return {
20
54
  sessionId,
21
55
  trackName,
22
- location: "remote"
56
+ location: "remote",
57
+ mid
23
58
  };
24
59
  }
25
60
  };
26
61
 
27
- // packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts
62
+ // src/calls/call-swarm-synchronizer.ts
28
63
  import md5Hex from "md5-hex";
29
64
  import { DeferredTask, Event, scheduleTaskInterval, synchronized } from "@dxos/async";
30
65
  import { Context, Resource } from "@dxos/context";
31
66
  import { generateName } from "@dxos/display-name";
32
- import { invariant } from "@dxos/invariant";
67
+ import { invariant as invariant2 } from "@dxos/invariant";
33
68
  import { PublicKey } from "@dxos/keys";
34
69
  import { log } from "@dxos/log";
35
70
  import { buf as buf2 } from "@dxos/protocols/buf";
36
71
  import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
37
72
  import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
38
73
  import { isNonNullable } from "@dxos/util";
74
+ function _define_property(obj, key, value) {
75
+ if (key in obj) {
76
+ Object.defineProperty(obj, key, {
77
+ value,
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true
81
+ });
82
+ } else {
83
+ obj[key] = value;
84
+ }
85
+ return obj;
86
+ }
39
87
  function _ts_decorate(decorators, target, key, desc) {
40
88
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
41
89
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
42
90
  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;
43
91
  return c > 3 && r && Object.defineProperty(target, key, r), r;
44
92
  }
45
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
93
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
46
94
  var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
47
95
  var CallSwarmSynchronizer = class extends Resource {
48
- constructor({ networkService }) {
49
- super();
50
- this.stateUpdated = new Event();
51
- this._state = {
52
- activities: {}
53
- };
54
- this._lastSwarmEvent = void 0;
55
- this._reconcileSwarmStateTask = void 0;
56
- this._identityKey = void 0;
57
- this._deviceKey = void 0;
58
- this._displayName = void 0;
59
- this._swarmCtx = void 0;
60
- this._sendStateTask = void 0;
61
- this._networkService = networkService;
62
- }
63
96
  /**
64
97
  * @internal
65
98
  */
@@ -125,7 +158,7 @@ var CallSwarmSynchronizer = class extends Resource {
125
158
  log.verbose("joined to a different room", {
126
159
  roomId
127
160
  }, {
128
- F: __dxlog_file,
161
+ F: __dxlog_file2,
129
162
  L: 152,
130
163
  S: this,
131
164
  C: (f, a) => f(...a)
@@ -147,8 +180,8 @@ var CallSwarmSynchronizer = class extends Resource {
147
180
  this._reconcileSwarmStateTask = void 0;
148
181
  }
149
182
  async join() {
150
- invariant(this._state.roomId, void 0, {
151
- F: __dxlog_file,
183
+ invariant2(this._state.roomId, void 0, {
184
+ F: __dxlog_file2,
152
185
  L: 176,
153
186
  S: this,
154
187
  A: [
@@ -156,8 +189,8 @@ var CallSwarmSynchronizer = class extends Resource {
156
189
  ""
157
190
  ]
158
191
  });
159
- invariant(!this._swarmCtx, "Already joined", {
160
- F: __dxlog_file,
192
+ invariant2(!this._swarmCtx, "Already joined", {
193
+ F: __dxlog_file2,
161
194
  L: 177,
162
195
  S: this,
163
196
  A: [
@@ -166,7 +199,7 @@ var CallSwarmSynchronizer = class extends Resource {
166
199
  ]
167
200
  });
168
201
  this._swarmCtx = new Context(void 0, {
169
- F: __dxlog_file,
202
+ F: __dxlog_file2,
170
203
  L: 179
171
204
  });
172
205
  const topic = getTopic(this._state.roomId);
@@ -177,7 +210,7 @@ var CallSwarmSynchronizer = class extends Resource {
177
210
  peerKey: this._deviceKey
178
211
  }
179
212
  }, {
180
- F: __dxlog_file,
213
+ F: __dxlog_file2,
181
214
  L: 181,
182
215
  S: this,
183
216
  C: (f, a) => f(...a)
@@ -196,7 +229,7 @@ var CallSwarmSynchronizer = class extends Resource {
196
229
  peerKey: this._deviceKey
197
230
  }
198
231
  }, {
199
- F: __dxlog_file,
232
+ F: __dxlog_file2,
200
233
  L: 188,
201
234
  S: this,
202
235
  C: (f, a) => f(...a)
@@ -208,7 +241,7 @@ var CallSwarmSynchronizer = class extends Resource {
208
241
  peerKey: this._deviceKey
209
242
  }
210
243
  }).catch((err) => log.catch(err, void 0, {
211
- F: __dxlog_file,
244
+ F: __dxlog_file2,
212
245
  L: 194,
213
246
  S: this,
214
247
  C: (f, a) => f(...a)
@@ -276,8 +309,8 @@ var CallSwarmSynchronizer = class extends Resource {
276
309
  }
277
310
  async _reconcileSwarmState() {
278
311
  const swarmEvent = this._lastSwarmEvent;
279
- invariant(swarmEvent, void 0, {
280
- F: __dxlog_file,
312
+ invariant2(swarmEvent, void 0, {
313
+ F: __dxlog_file2,
281
314
  L: 273,
282
315
  S: this,
283
316
  A: [
@@ -297,7 +330,7 @@ var CallSwarmSynchronizer = class extends Resource {
297
330
  error,
298
331
  peer
299
332
  }, {
300
- F: __dxlog_file,
333
+ F: __dxlog_file2,
301
334
  L: 290,
302
335
  S: this,
303
336
  C: (f, a) => f(...a)
@@ -310,7 +343,7 @@ var CallSwarmSynchronizer = class extends Resource {
310
343
  log("reconciling swarm state", {
311
344
  users
312
345
  }, {
313
- F: __dxlog_file,
346
+ F: __dxlog_file2,
314
347
  L: 297,
315
348
  S: this,
316
349
  C: (f, a) => f(...a)
@@ -333,6 +366,12 @@ var CallSwarmSynchronizer = class extends Resource {
333
366
  scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
334
367
  }
335
368
  }
369
+ constructor({ networkService }) {
370
+ super(), _define_property(this, "stateUpdated", new Event()), _define_property(this, "_state", {
371
+ activities: {}
372
+ }), _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);
373
+ this._networkService = networkService;
374
+ }
336
375
  };
337
376
  _ts_decorate([
338
377
  synchronized
@@ -355,7 +394,7 @@ var LamportTimestampCrdt = class {
355
394
  };
356
395
  var getTopic = (roomId) => PublicKey.fromHex(md5Hex(roomId));
357
396
 
358
- // packages/plugins/plugin-thread/src/calls/util/audio.ts
397
+ // src/calls/util/audio.ts
359
398
  var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure }) => {
360
399
  let timeout = -1;
361
400
  let interval = -1;
@@ -397,18 +436,27 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
397
436
  };
398
437
  };
399
438
 
400
- // packages/plugins/plugin-thread/src/calls/util/calls-service.ts
401
- import { PersistentLifecycle } from "@dxos/async";
439
+ // src/calls/util/calls-service.ts
440
+ import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
402
441
  import { Resource as Resource2 } from "@dxos/context";
403
- import { invariant as invariant2 } from "@dxos/invariant";
442
+ import { invariant as invariant3 } from "@dxos/invariant";
404
443
  import { log as log2 } from "@dxos/log";
405
444
 
406
- // packages/plugins/plugin-thread/src/calls/util/history-cache.ts
407
- var HistoryCache = class {
408
- constructor(limit = 100) {
409
- this._limit = limit;
410
- this._messages = [];
445
+ // src/calls/util/history-cache.ts
446
+ function _define_property2(obj, key, value) {
447
+ if (key in obj) {
448
+ Object.defineProperty(obj, key, {
449
+ value,
450
+ enumerable: true,
451
+ configurable: true,
452
+ writable: true
453
+ });
454
+ } else {
455
+ obj[key] = value;
411
456
  }
457
+ return obj;
458
+ }
459
+ var HistoryCache = class {
412
460
  push(...messages) {
413
461
  if (this._messages.length >= this._limit) {
414
462
  this._messages.shift();
@@ -418,53 +466,98 @@ var HistoryCache = class {
418
466
  get() {
419
467
  return this._messages;
420
468
  }
469
+ constructor(limit = 100) {
470
+ _define_property2(this, "_limit", void 0);
471
+ _define_property2(this, "_messages", void 0);
472
+ this._limit = limit;
473
+ this._messages = [];
474
+ }
421
475
  };
422
476
 
423
- // packages/plugins/plugin-thread/src/calls/util/task-scheduling.ts
477
+ // src/calls/util/task-scheduling.ts
478
+ function _check_private_redeclaration(obj, privateCollection) {
479
+ if (privateCollection.has(obj)) {
480
+ throw new TypeError("Cannot initialize the same private elements twice on an object");
481
+ }
482
+ }
483
+ function _class_apply_descriptor_get(receiver, descriptor) {
484
+ if (descriptor.get) {
485
+ return descriptor.get.call(receiver);
486
+ }
487
+ return descriptor.value;
488
+ }
489
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
490
+ if (descriptor.set) {
491
+ descriptor.set.call(receiver, value);
492
+ } else {
493
+ if (!descriptor.writable) {
494
+ throw new TypeError("attempted to set read only private field");
495
+ }
496
+ descriptor.value = value;
497
+ }
498
+ }
499
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
500
+ if (!privateMap.has(receiver)) {
501
+ throw new TypeError("attempted to " + action + " private field on non-instance");
502
+ }
503
+ return privateMap.get(receiver);
504
+ }
505
+ function _class_private_field_get(receiver, privateMap) {
506
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
507
+ return _class_apply_descriptor_get(receiver, descriptor);
508
+ }
509
+ function _class_private_field_init(obj, privateMap, value) {
510
+ _check_private_redeclaration(obj, privateMap);
511
+ privateMap.set(obj, value);
512
+ }
513
+ function _class_private_field_set(receiver, privateMap, value) {
514
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
515
+ _class_apply_descriptor_set(receiver, descriptor, value);
516
+ return value;
517
+ }
424
518
  var DefaultBatchSizeLimit = 64;
519
+ var _schedulerChain = /* @__PURE__ */ new WeakMap();
425
520
  var FIFOScheduler = class {
426
- #schedulerChain;
427
- constructor() {
428
- this.#schedulerChain = Promise.resolve();
429
- }
430
521
  schedule(task) {
431
522
  return new Promise((resolve, reject) => {
432
- this.#schedulerChain = this.#schedulerChain.then(async () => {
523
+ _class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
433
524
  try {
434
525
  resolve(await task());
435
526
  } catch (error) {
436
527
  reject(error);
437
528
  }
438
- });
529
+ }));
439
530
  });
440
531
  }
532
+ constructor() {
533
+ _class_private_field_init(this, _schedulerChain, {
534
+ writable: true,
535
+ value: void 0
536
+ });
537
+ _class_private_field_set(this, _schedulerChain, Promise.resolve());
538
+ }
441
539
  };
540
+ var _currentBatch = /* @__PURE__ */ new WeakMap();
541
+ var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
542
+ var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
442
543
  var BulkRequestDispatcher = class {
443
- #currentBatch;
444
- #currentBulkResponse;
445
- #batchSizeLimit;
446
- constructor(batchSizeLimit = DefaultBatchSizeLimit) {
447
- this.#currentBatch = [];
448
- this.#currentBulkResponse = null;
449
- this.#batchSizeLimit = batchSizeLimit;
450
- }
451
544
  /**
452
545
  * Returns a bulk response promise.
453
546
  * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
454
547
  */
455
548
  doBulkRequest(params, bulkRequestFunc) {
456
- if (this.#currentBatch.length >= this.#batchSizeLimit) {
457
- this.#currentBatch = [];
458
- this.#currentBulkResponse = null;
549
+ if (_class_private_field_get(this, _currentBatch).length >= _class_private_field_get(this, _batchSizeLimit)) {
550
+ _class_private_field_set(this, _currentBatch, []);
551
+ _class_private_field_set(this, _currentBulkResponse, null);
459
552
  }
460
- this.#currentBatch.push(params);
461
- if (this.#currentBulkResponse != null) {
462
- return this.#currentBulkResponse;
553
+ _class_private_field_get(this, _currentBatch).push(params);
554
+ if (_class_private_field_get(this, _currentBulkResponse) != null) {
555
+ return _class_private_field_get(this, _currentBulkResponse);
463
556
  }
464
- const batch = this.#currentBatch;
465
- this.#currentBulkResponse = new Promise((resolve, reject) => {
557
+ const batch = _class_private_field_get(this, _currentBatch);
558
+ _class_private_field_set(this, _currentBulkResponse, new Promise((resolve, reject) => {
466
559
  setTimeout(() => {
467
- this.#currentBulkResponse = null;
560
+ _class_private_field_set(this, _currentBulkResponse, null);
468
561
  const batchCopy = batch.splice(0, batch.length);
469
562
  bulkRequestFunc(batchCopy).then((result) => {
470
563
  resolve(result);
@@ -472,28 +565,45 @@ var BulkRequestDispatcher = class {
472
565
  reject(err);
473
566
  });
474
567
  }, 0);
568
+ }));
569
+ return _class_private_field_get(this, _currentBulkResponse);
570
+ }
571
+ constructor(batchSizeLimit = DefaultBatchSizeLimit) {
572
+ _class_private_field_init(this, _currentBatch, {
573
+ writable: true,
574
+ value: void 0
475
575
  });
476
- return this.#currentBulkResponse;
576
+ _class_private_field_init(this, _currentBulkResponse, {
577
+ writable: true,
578
+ value: void 0
579
+ });
580
+ _class_private_field_init(this, _batchSizeLimit, {
581
+ writable: true,
582
+ value: void 0
583
+ });
584
+ _class_private_field_set(this, _currentBatch, []);
585
+ _class_private_field_set(this, _currentBulkResponse, null);
586
+ _class_private_field_set(this, _batchSizeLimit, batchSizeLimit);
477
587
  }
478
588
  };
479
589
 
480
- // packages/plugins/plugin-thread/src/calls/util/calls-service.ts
481
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
482
- var NETWORK_TIMEOUT = 5e3;
483
- var CallsServicePeer = class extends Resource2 {
484
- constructor(config) {
485
- super();
486
- this.history = new HistoryCache(100);
487
- this._persistentLifecycle = new PersistentLifecycle({
488
- start: () => this._startSession(),
489
- stop: (session) => this._stopSession(session)
590
+ // src/calls/util/calls-service.ts
591
+ function _define_property3(obj, key, value) {
592
+ if (key in obj) {
593
+ Object.defineProperty(obj, key, {
594
+ value,
595
+ enumerable: true,
596
+ configurable: true,
597
+ writable: true
490
598
  });
491
- this.taskScheduler = new FIFOScheduler();
492
- this.pushTrackDispatcher = new BulkRequestDispatcher(32);
493
- this.pullTrackDispatcher = new BulkRequestDispatcher(32);
494
- this.closeTrackDispatcher = new BulkRequestDispatcher(32);
495
- this._config = config;
599
+ } else {
600
+ obj[key] = value;
496
601
  }
602
+ return obj;
603
+ }
604
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
605
+ var NETWORK_TIMEOUT = 5e3;
606
+ var CallsServicePeer = class extends Resource2 {
497
607
  async _open(ctx) {
498
608
  await this._persistentLifecycle.open(ctx);
499
609
  }
@@ -521,11 +631,11 @@ var CallsServicePeer = class extends Resource2 {
521
631
  });
522
632
  peerConnection.addEventListener("connectionstatechange", () => {
523
633
  if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
524
- log2.warn("calls connection failed", {
634
+ log2.info("calls connection failed", {
525
635
  state: peerConnection.connectionState
526
636
  }, {
527
- F: __dxlog_file2,
528
- L: 115,
637
+ F: __dxlog_file3,
638
+ L: 121,
529
639
  S: this,
530
640
  C: (f, a) => f(...a)
531
641
  });
@@ -536,11 +646,11 @@ var CallsServicePeer = class extends Resource2 {
536
646
  peerConnection.addEventListener("iceconnectionstatechange", () => {
537
647
  clearTimeout(iceTimeout);
538
648
  if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
539
- log2.warn("calls connection to ICEs failed", {
649
+ log2.info("calls connection to ICEs failed", {
540
650
  state: peerConnection.iceConnectionState
541
651
  }, {
542
- F: __dxlog_file2,
543
- L: 124,
652
+ F: __dxlog_file3,
653
+ L: 130,
544
654
  S: this,
545
655
  C: (f, a) => f(...a)
546
656
  });
@@ -550,19 +660,19 @@ var CallsServicePeer = class extends Resource2 {
550
660
  iceTimeout = window.setTimeout(() => {
551
661
  if (peerConnection.iceConnectionState === "connected") {
552
662
  log2.info("calls iceConnectionState is connected", void 0, {
553
- F: __dxlog_file2,
554
- L: 133,
663
+ F: __dxlog_file3,
664
+ L: 139,
555
665
  S: this,
556
666
  C: (f, a) => f(...a)
557
667
  });
558
668
  return;
559
669
  }
560
- log2.warn("calls iceConnectionState timed out", {
670
+ log2.info("calls iceConnectionState timed out", {
561
671
  state: peerConnection.iceConnectionState,
562
672
  timeoutSeconds
563
673
  }, {
564
- F: __dxlog_file2,
565
- L: 137,
674
+ F: __dxlog_file3,
675
+ L: 143,
566
676
  S: this,
567
677
  C: (f, a) => f(...a)
568
678
  });
@@ -574,8 +684,8 @@ var CallsServicePeer = class extends Resource2 {
574
684
  }
575
685
  async _initiateCallSession() {
576
686
  log2("creating new session", void 0, {
577
- F: __dxlog_file2,
578
- L: 147,
687
+ F: __dxlog_file3,
688
+ L: 153,
579
689
  S: this,
580
690
  C: (f, a) => f(...a)
581
691
  });
@@ -586,6 +696,7 @@ var CallsServicePeer = class extends Resource2 {
586
696
  }
587
697
  async _fetch(relativePath, requestInit) {
588
698
  this.history.push({
699
+ endpoint: relativePath,
589
700
  type: "request",
590
701
  time: (/* @__PURE__ */ new Date()).toISOString(),
591
702
  method: requestInit?.method ?? "GET",
@@ -600,8 +711,8 @@ var CallsServicePeer = class extends Resource2 {
600
711
  status: response.status,
601
712
  text: await response.text()
602
713
  }, {
603
- F: __dxlog_file2,
604
- L: 162,
714
+ F: __dxlog_file3,
715
+ L: 169,
605
716
  S: this,
606
717
  C: (f, a) => f(...a)
607
718
  });
@@ -610,6 +721,7 @@ var CallsServicePeer = class extends Resource2 {
610
721
  try {
611
722
  const data = await response.clone().json();
612
723
  this.history.push({
724
+ endpoint: relativePath,
613
725
  type: "response",
614
726
  time: (/* @__PURE__ */ new Date()).toISOString(),
615
727
  status: response.status,
@@ -622,6 +734,7 @@ var CallsServicePeer = class extends Resource2 {
622
734
  } catch (error) {
623
735
  const text = await response.text();
624
736
  this.history.push({
737
+ endpoint: relativePath,
625
738
  type: "response",
626
739
  time: (/* @__PURE__ */ new Date()).toISOString(),
627
740
  status: response.status,
@@ -632,8 +745,8 @@ var CallsServicePeer = class extends Resource2 {
632
745
  text,
633
746
  status: response.status
634
747
  }, {
635
- F: __dxlog_file2,
636
- L: 187,
748
+ F: __dxlog_file3,
749
+ L: 196,
637
750
  S: this,
638
751
  C: (f, a) => f(...a)
639
752
  });
@@ -642,8 +755,8 @@ var CallsServicePeer = class extends Resource2 {
642
755
  }
643
756
  async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
644
757
  log2.verbose("pushing track ", trackName, {
645
- F: __dxlog_file2,
646
- L: 209,
758
+ F: __dxlog_file3,
759
+ L: 218,
647
760
  S: this,
648
761
  C: (f, a) => f(...a)
649
762
  });
@@ -668,9 +781,9 @@ var CallsServicePeer = class extends Resource2 {
668
781
  }))
669
782
  })
670
783
  });
671
- invariant2(response.tracks !== void 0, void 0, {
672
- F: __dxlog_file2,
673
- L: 234,
784
+ invariant3(response.tracks !== void 0, void 0, {
785
+ F: __dxlog_file3,
786
+ L: 243,
674
787
  S: this,
675
788
  A: [
676
789
  "response.tracks !== undefined",
@@ -684,7 +797,7 @@ var CallsServicePeer = class extends Resource2 {
684
797
  return {
685
798
  tracks: response.tracks
686
799
  };
687
- })).then(({ tracks }) => {
800
+ })).then(async ({ tracks }) => {
688
801
  const trackData = tracks.find((t) => t.mid === transceiver.mid);
689
802
  if (trackData) {
690
803
  return {
@@ -694,19 +807,12 @@ var CallsServicePeer = class extends Resource2 {
694
807
  };
695
808
  } else {
696
809
  log2.error("missing track data", void 0, {
697
- F: __dxlog_file2,
698
- L: 254,
810
+ F: __dxlog_file3,
811
+ L: 267,
699
812
  S: this,
700
813
  C: (f, a) => f(...a)
701
814
  });
702
815
  }
703
- }).catch((err) => {
704
- log2.catch(err, void 0, {
705
- F: __dxlog_file2,
706
- L: 258,
707
- S: this,
708
- C: (f, a) => f(...a)
709
- });
710
816
  });
711
817
  const onDispose = async () => {
712
818
  if (transceiver.mid) {
@@ -719,9 +825,9 @@ var CallsServicePeer = class extends Resource2 {
719
825
  }
720
826
  async pushTrack({ track, encodings = [], ctx, previousTrack }) {
721
827
  await this.waitUntilOpen();
722
- invariant2(this.session, void 0, {
723
- F: __dxlog_file2,
724
- L: 285,
828
+ invariant3(this.session, void 0, {
829
+ F: __dxlog_file3,
830
+ L: 295,
725
831
  S: this,
726
832
  A: [
727
833
  "this.session",
@@ -733,8 +839,8 @@ var CallsServicePeer = class extends Resource2 {
733
839
  previousTrack,
734
840
  encodings
735
841
  }, {
736
- F: __dxlog_file2,
737
- L: 286,
842
+ F: __dxlog_file3,
843
+ L: 296,
738
844
  S: this,
739
845
  C: (f, a) => f(...a)
740
846
  });
@@ -746,8 +852,8 @@ var CallsServicePeer = class extends Resource2 {
746
852
  previousTrack,
747
853
  transceiver: transceiver2
748
854
  }, {
749
- F: __dxlog_file2,
750
- L: 290,
855
+ F: __dxlog_file3,
856
+ L: 300,
751
857
  S: this,
752
858
  C: (f, a) => f(...a)
753
859
  });
@@ -758,23 +864,23 @@ var CallsServicePeer = class extends Resource2 {
758
864
  previousTrack,
759
865
  transceiver: transceiver2
760
866
  }, {
761
- F: __dxlog_file2,
762
- L: 293,
867
+ F: __dxlog_file3,
868
+ L: 303,
763
869
  S: this,
764
870
  C: (f, a) => f(...a)
765
871
  });
766
872
  transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
767
- F: __dxlog_file2,
768
- L: 294,
873
+ F: __dxlog_file3,
874
+ L: 304,
769
875
  S: this,
770
876
  C: (f, a) => f(...a)
771
877
  }));
772
878
  return previousTrack;
773
879
  }
774
880
  }
775
- invariant2(track, void 0, {
776
- F: __dxlog_file2,
777
- L: 298,
881
+ invariant3(track, void 0, {
882
+ F: __dxlog_file3,
883
+ L: 308,
778
884
  S: this,
779
885
  A: [
780
886
  "track",
@@ -786,8 +892,8 @@ var CallsServicePeer = class extends Resource2 {
786
892
  direction: "sendonly"
787
893
  });
788
894
  log2.verbose("creating transceiver", void 0, {
789
- F: __dxlog_file2,
790
- L: 303,
895
+ F: __dxlog_file3,
896
+ L: 313,
791
897
  S: this,
792
898
  C: (f, a) => f(...a)
793
899
  });
@@ -798,9 +904,9 @@ var CallsServicePeer = class extends Resource2 {
798
904
  sessionId: this.session.sessionId,
799
905
  trackName: stableId
800
906
  });
801
- invariant2(pushedTrackData, void 0, {
802
- F: __dxlog_file2,
803
- L: 312,
907
+ invariant3(pushedTrackData, void 0, {
908
+ F: __dxlog_file3,
909
+ L: 322,
804
910
  S: this,
805
911
  A: [
806
912
  "pushedTrackData",
@@ -816,8 +922,8 @@ var CallsServicePeer = class extends Resource2 {
816
922
  };
817
923
  });
818
924
  transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
819
- F: __dxlog_file2,
820
- L: 319,
925
+ F: __dxlog_file3,
926
+ L: 329,
821
927
  S: this,
822
928
  C: (f, a) => f(...a)
823
929
  }));
@@ -829,8 +935,8 @@ var CallsServicePeer = class extends Resource2 {
829
935
  log2("pulling track", {
830
936
  trackName: trackData.trackName
831
937
  }, {
832
- F: __dxlog_file2,
833
- L: 337,
938
+ F: __dxlog_file3,
939
+ L: 347,
834
940
  S: this,
835
941
  C: (f, a) => f(...a)
836
942
  });
@@ -844,9 +950,9 @@ var CallsServicePeer = class extends Resource2 {
844
950
  if (newTrackResponse.errorCode) {
845
951
  throw new Error(newTrackResponse.errorDescription);
846
952
  }
847
- invariant2(newTrackResponse.tracks, void 0, {
848
- F: __dxlog_file2,
849
- L: 350,
953
+ invariant3(newTrackResponse.tracks, void 0, {
954
+ F: __dxlog_file3,
955
+ L: 360,
850
956
  S: this,
851
957
  A: [
852
958
  "newTrackResponse.tracks",
@@ -856,7 +962,7 @@ var CallsServicePeer = class extends Resource2 {
856
962
  const trackMap = tracks.reduce((acc, track) => {
857
963
  const pulledTrackData = newTrackResponse.tracks?.find((t) => t.trackName === track.trackName && t.sessionId === track.sessionId);
858
964
  if (pulledTrackData && pulledTrackData.mid) {
859
- acc.set(track, {
965
+ acc.set(track.trackName, {
860
966
  mid: pulledTrackData.mid,
861
967
  resolvedTrack: resolveTrack(peerConnection, (t) => t.mid === pulledTrackData.mid)
862
968
  });
@@ -886,21 +992,24 @@ var CallsServicePeer = class extends Resource2 {
886
992
  trackMap
887
993
  };
888
994
  })).then(({ trackMap }) => {
889
- const trackInfo = trackMap.get(trackData);
995
+ const trackInfo = trackMap.get(trackData.trackName);
890
996
  if (trackInfo) {
891
997
  return trackInfo.resolvedTrack.then((track) => {
892
998
  mid = trackInfo.mid;
893
999
  return track;
894
1000
  }).catch((err) => log2.catch(err, void 0, {
895
- F: __dxlog_file2,
896
- L: 402,
1001
+ F: __dxlog_file3,
1002
+ L: 412,
897
1003
  S: this,
898
1004
  C: (f, a) => f(...a)
899
1005
  }));
900
1006
  } else {
901
- log2.error("missing track info", void 0, {
902
- F: __dxlog_file2,
903
- L: 404,
1007
+ log2.info("missing track info", {
1008
+ trackData,
1009
+ availableTracks: Array.from(trackMap.keys())
1010
+ }, {
1011
+ F: __dxlog_file3,
1012
+ L: 414,
904
1013
  S: this,
905
1014
  C: (f, a) => f(...a)
906
1015
  });
@@ -909,8 +1018,8 @@ var CallsServicePeer = class extends Resource2 {
909
1018
  const onDispose = async () => {
910
1019
  if (mid) {
911
1020
  log2("closing pulled track ", trackData.trackName, {
912
- F: __dxlog_file2,
913
- L: 410,
1021
+ F: __dxlog_file3,
1022
+ L: 420,
914
1023
  S: this,
915
1024
  C: (f, a) => f(...a)
916
1025
  });
@@ -924,9 +1033,9 @@ var CallsServicePeer = class extends Resource2 {
924
1033
  }
925
1034
  async pullTrack({ ctx, trackData }) {
926
1035
  await this.waitUntilOpen();
927
- invariant2(this.session, void 0, {
928
- F: __dxlog_file2,
929
- L: 431,
1036
+ invariant3(this.session, void 0, {
1037
+ F: __dxlog_file3,
1038
+ L: 441,
930
1039
  S: this,
931
1040
  A: [
932
1041
  "this.session",
@@ -978,6 +1087,13 @@ var CallsServicePeer = class extends Resource2 {
978
1087
  }
979
1088
  }));
980
1089
  }
1090
+ constructor(config) {
1091
+ super(), _define_property3(this, "history", new HistoryCache(100)), _define_property3(this, "_persistentLifecycle", new PersistentLifecycle({
1092
+ start: () => this._startSession(),
1093
+ stop: (session) => this._stopSession(session)
1094
+ })), _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));
1095
+ this._config = config;
1096
+ }
981
1097
  };
982
1098
  var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
983
1099
  setTimeout(reject, timeout);
@@ -1010,11 +1126,11 @@ var peerConnectionIsConnected = async (peerConnection) => {
1010
1126
  }
1011
1127
  };
1012
1128
 
1013
- // packages/plugins/plugin-thread/src/calls/util/media.ts
1129
+ // src/calls/util/media.ts
1014
1130
  import { log as log3 } from "@dxos/log";
1015
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
1131
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
1016
1132
  var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1017
- deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);
1133
+ deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
1018
1134
  const firstDevice = deviceList[0];
1019
1135
  if (!firstDevice) {
1020
1136
  throw new Error("No devices found");
@@ -1024,7 +1140,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1024
1140
  var acquireTrack = async (device, constraints) => {
1025
1141
  const { deviceId, label } = device;
1026
1142
  log3.info(`requesting ${label}`, void 0, {
1027
- F: __dxlog_file3,
1143
+ F: __dxlog_file4,
1028
1144
  L: 23,
1029
1145
  S: void 0,
1030
1146
  C: (f, a) => f(...a)
@@ -1066,68 +1182,27 @@ var getScreenshare = async ({ contentHint }) => {
1066
1182
  return ms;
1067
1183
  };
1068
1184
 
1069
- // packages/plugins/plugin-thread/src/calls/util/stub-media-streams.ts
1070
- import { waitForCondition, scheduleTaskInterval as scheduleTaskInterval2 } from "@dxos/async";
1071
- import { cancelWithContext } from "@dxos/context";
1072
- import { invariant as invariant3 } from "@dxos/invariant";
1073
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/stub-media-streams.ts";
1074
- var createBlackCanvasStreamTrack = async ({ ctx, width, height }) => {
1075
- const canvas = document.createElement("canvas");
1076
- canvas.width = width;
1077
- canvas.height = height;
1078
- const canvasCtx = canvas.getContext("2d");
1079
- invariant3(canvasCtx, void 0, {
1080
- F: __dxlog_file4,
1081
- L: 28,
1082
- S: void 0,
1083
- A: [
1084
- "canvasCtx",
1085
- ""
1086
- ]
1087
- });
1088
- const drawFrame = () => {
1089
- canvasCtx.fillStyle = "black";
1090
- canvasCtx.fillRect(0, 0, canvas.width, canvas.height);
1091
- };
1092
- scheduleTaskInterval2(ctx, async () => drawFrame(), 1e3);
1093
- const track = canvas.captureStream().getVideoTracks()[0];
1094
- drawFrame();
1095
- await cancelWithContext(ctx, waitForCondition({
1096
- condition: () => track.readyState === "live",
1097
- timeout: 1e3
1098
- }));
1099
- return track;
1100
- };
1101
- var createInaudibleAudioStreamTrack = async ({ ctx }) => {
1102
- const audioContext = new window.AudioContext();
1103
- const oscillator = audioContext.createOscillator();
1104
- oscillator.type = "triangle";
1105
- oscillator.frequency.setValueAtTime(0.1, audioContext.currentTime);
1106
- const gainNode = audioContext.createGain();
1107
- gainNode.gain.setValueAtTime(0, audioContext.currentTime);
1108
- oscillator.connect(gainNode);
1109
- const destination = audioContext.createMediaStreamDestination();
1110
- gainNode.connect(destination);
1111
- oscillator.start();
1112
- ctx.onDispose(async () => {
1113
- oscillator.disconnect();
1114
- oscillator.stop();
1115
- await audioContext.close();
1116
- });
1117
- return destination.stream.getAudioTracks()[0];
1118
- };
1119
-
1120
- // packages/plugins/plugin-thread/src/calls/speaking-monitor.ts
1185
+ // src/calls/speaking-monitor.ts
1121
1186
  import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
1122
1187
  import { Resource as Resource3 } from "@dxos/context";
1188
+ function _define_property4(obj, key, value) {
1189
+ if (key in obj) {
1190
+ Object.defineProperty(obj, key, {
1191
+ value,
1192
+ enumerable: true,
1193
+ configurable: true,
1194
+ writable: true
1195
+ });
1196
+ } else {
1197
+ obj[key] = value;
1198
+ }
1199
+ return obj;
1200
+ }
1123
1201
  var NOT_SPEAKING_AFTER = 500;
1124
1202
  var START_SPEAKING_THRESHOLD = 0.05;
1125
1203
  var CONTINUE_SPEAKING_THRESHOLD = 0.02;
1126
1204
  var MIN_EVENT_INTERVAL = 100;
1127
1205
  var SpeakingMonitor = class extends Resource3 {
1128
- constructor(_mediaStreamTrack) {
1129
- super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
1130
- }
1131
1206
  get isSpeaking() {
1132
1207
  return this._isSpeaking;
1133
1208
  }
@@ -1171,39 +1246,50 @@ var SpeakingMonitor = class extends Resource3 {
1171
1246
  this._lastEventTime = Date.now();
1172
1247
  this.speakingChanged.emit(this._isSpeaking);
1173
1248
  }
1249
+ constructor(_mediaStreamTrack) {
1250
+ super(), _define_property4(this, "_mediaStreamTrack", void 0), /**
1251
+ * Event that is emitted when the user starts or stops speaking.
1252
+ * It is debounced to prevent rapid state changes.
1253
+ */
1254
+ _define_property4(this, "speakingChanged", void 0), /**
1255
+ * Real state of the user speaking.
1256
+ */
1257
+ _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;
1258
+ }
1174
1259
  };
1175
1260
 
1176
- // packages/plugins/plugin-thread/src/calls/media-manager.ts
1261
+ // src/calls/media-manager.ts
1177
1262
  import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
1178
- import { cancelWithContext as cancelWithContext2, Resource as Resource4 } from "@dxos/context";
1263
+ import { Resource as Resource4, cancelWithContext } from "@dxos/context";
1264
+ import { invariant as invariant4 } from "@dxos/invariant";
1179
1265
  import { log as log4 } from "@dxos/log";
1266
+ function _define_property5(obj, key, value) {
1267
+ if (key in obj) {
1268
+ Object.defineProperty(obj, key, {
1269
+ value,
1270
+ enumerable: true,
1271
+ configurable: true,
1272
+ writable: true
1273
+ });
1274
+ } else {
1275
+ obj[key] = value;
1276
+ }
1277
+ return obj;
1278
+ }
1180
1279
  function _ts_decorate2(decorators, target, key, desc) {
1181
1280
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1182
1281
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1183
1282
  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;
1184
1283
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1185
1284
  }
1186
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
1285
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
1187
1286
  var VIDEO_WIDTH = 1280;
1188
1287
  var VIDEO_HEIGHT = 720;
1189
1288
  var MAX_WEB_CAM_FRAMERATE = 24;
1190
1289
  var MAX_WEB_CAM_BITRATE = 12e5;
1191
- var RETRY_INTERVAL = 500;
1290
+ var RETRY_INTERVAL = 100;
1291
+ var USE_INAUDIBLE_AUDIO = true;
1192
1292
  var MediaManager = class extends Resource4 {
1193
- constructor() {
1194
- super(...arguments);
1195
- this.stateUpdated = new Event3();
1196
- this._state = {
1197
- pulledVideoStreams: {},
1198
- pulledAudioTracks: {}
1199
- };
1200
- this._speakingMonitor = void 0;
1201
- this._trackToReconcile = [];
1202
- this._blackCanvasStreamTrack = void 0;
1203
- this._inaudibleAudioStreamTrack = void 0;
1204
- this._pushTracksTask = void 0;
1205
- this._pullTracksTask = void 0;
1206
- }
1207
1293
  get isSpeaking() {
1208
1294
  return this._speakingMonitor?.isSpeaking;
1209
1295
  }
@@ -1222,10 +1308,12 @@ var MediaManager = class extends Resource4 {
1222
1308
  this._state.videoTrack = this._blackCanvasStreamTrack;
1223
1309
  this._state.videoStream = new MediaStream();
1224
1310
  this._state.videoStream.addTrack(this._state.videoTrack);
1225
- this._inaudibleAudioStreamTrack = await createInaudibleAudioStreamTrack({
1226
- ctx: this._ctx
1227
- });
1228
- this._state.audioTrack = this._inaudibleAudioStreamTrack;
1311
+ if (USE_INAUDIBLE_AUDIO) {
1312
+ this._inaudibleAudioStreamTrack = await createInaudibleAudioStreamTrack({
1313
+ ctx: this._ctx
1314
+ });
1315
+ this._state.audioTrack = this._inaudibleAudioStreamTrack;
1316
+ }
1229
1317
  this._pushTracksTask = new DeferredTask3(this._ctx, async () => {
1230
1318
  await this._pushTracks();
1231
1319
  });
@@ -1300,11 +1388,14 @@ var MediaManager = class extends Resource4 {
1300
1388
  async turnAudioOff() {
1301
1389
  void this._speakingMonitor?.close();
1302
1390
  this._speakingMonitor = void 0;
1303
- if (this._state.audioTrack !== this._inaudibleAudioStreamTrack) {
1391
+ this._state.audioEnabled = false;
1392
+ if (USE_INAUDIBLE_AUDIO && this._state.audioTrack !== this._inaudibleAudioStreamTrack) {
1304
1393
  this._state.audioTrack?.stop();
1305
1394
  this._state.audioTrack = this._inaudibleAudioStreamTrack;
1395
+ } else {
1396
+ this._state.audioTrack?.stop();
1397
+ this._state.audioTrack = void 0;
1306
1398
  }
1307
- this._state.audioEnabled = false;
1308
1399
  this.stateUpdated.emit(this._state);
1309
1400
  this._pushTracksTask.schedule();
1310
1401
  }
@@ -1338,11 +1429,11 @@ var MediaManager = class extends Resource4 {
1338
1429
  async _reconcilePulledMedia() {
1339
1430
  log4("reconciling tracks", void 0, {
1340
1431
  F: __dxlog_file5,
1341
- L: 215,
1432
+ L: 223,
1342
1433
  S: this,
1343
1434
  C: (f, a) => f(...a)
1344
1435
  });
1345
- await cancelWithContext2(this._ctx, sleep2(800));
1436
+ await cancelWithContext(this._ctx, sleep2(800));
1346
1437
  const trackNames = this._trackToReconcile;
1347
1438
  const tracksToPull = trackNames.filter((name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name]);
1348
1439
  const audioTracksToClose = Object.entries(this._state.pulledAudioTracks).filter(([key]) => !trackNames.some((name) => name === key));
@@ -1356,11 +1447,11 @@ var MediaManager = class extends Resource4 {
1356
1447
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1357
1448
  }, {
1358
1449
  F: __dxlog_file5,
1359
- L: 234,
1450
+ L: 242,
1360
1451
  S: this,
1361
1452
  C: (f, a) => f(...a)
1362
1453
  });
1363
- await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1454
+ const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1364
1455
  await Promise.all([
1365
1456
  ...audioTracksToClose,
1366
1457
  ...videoStreamsToClose
@@ -1370,54 +1461,101 @@ var MediaManager = class extends Resource4 {
1370
1461
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1371
1462
  }, {
1372
1463
  F: __dxlog_file5,
1373
- L: 249,
1464
+ L: 257,
1374
1465
  S: this,
1375
1466
  C: (f, a) => f(...a)
1376
1467
  });
1377
1468
  this.stateUpdated.emit(this._state);
1469
+ if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
1470
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1471
+ log4.info("retrying pull tracks", {
1472
+ tracksToPull
1473
+ }, {
1474
+ F: __dxlog_file5,
1475
+ L: 265,
1476
+ S: this,
1477
+ C: (f, a) => f(...a)
1478
+ });
1479
+ invariant4(this._pullTracksTask, void 0, {
1480
+ F: __dxlog_file5,
1481
+ L: 266,
1482
+ S: this,
1483
+ A: [
1484
+ "this._pullTracksTask",
1485
+ ""
1486
+ ]
1487
+ });
1488
+ this._pullTracksTask.schedule();
1489
+ }
1378
1490
  }
1379
1491
  async _pushTracks() {
1380
1492
  if (!this._state.peer?.isOpen) {
1381
1493
  return;
1382
1494
  }
1383
1495
  let updated = false;
1384
- const [pushedVideoTrack, pushedAudioTrack, pushedScreenshareTrack] = await Promise.all([
1385
- this._pushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1496
+ const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
1497
+ this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1386
1498
  {
1387
1499
  maxFramerate: MAX_WEB_CAM_FRAMERATE,
1388
1500
  maxBitrate: MAX_WEB_CAM_BITRATE
1389
1501
  }
1390
1502
  ]),
1391
- this._pushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1503
+ this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1392
1504
  {
1393
1505
  networkPriority: "high"
1394
1506
  }
1395
1507
  ]),
1396
- this._pushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1508
+ this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1397
1509
  ]);
1398
- if (pushedVideoTrack !== this._state.pushedVideoTrack) {
1399
- this._state.pushedVideoTrack = pushedVideoTrack;
1510
+ if (pushVideoResult.track !== this._state.pushedVideoTrack) {
1511
+ this._state.pushedVideoTrack = pushVideoResult.track;
1400
1512
  updated = true;
1401
1513
  }
1402
- if (pushedAudioTrack !== this._state.pushedAudioTrack) {
1403
- this._state.pushedAudioTrack = pushedAudioTrack;
1514
+ if (pushAudioResult.track !== this._state.pushedAudioTrack) {
1515
+ this._state.pushedAudioTrack = pushAudioResult.track;
1404
1516
  updated = true;
1405
1517
  }
1406
- if (pushedScreenshareTrack !== this._state.pushedScreenshareTrack) {
1407
- this._state.pushedScreenshareTrack = pushedScreenshareTrack;
1518
+ if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
1519
+ this._state.pushedScreenshareTrack = pushScreenshareResult.track;
1408
1520
  updated = true;
1409
1521
  }
1410
- if (!updated) {
1411
- return;
1522
+ const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
1523
+ if (updated) {
1524
+ this.stateUpdated.emit(this._state);
1525
+ }
1526
+ if (shouldRetry) {
1527
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1528
+ log4.info("retrying push tracks", {
1529
+ pushVideoResult,
1530
+ pushAudioResult,
1531
+ pushScreenshareResult
1532
+ }, {
1533
+ F: __dxlog_file5,
1534
+ L: 306,
1535
+ S: this,
1536
+ C: (f, a) => f(...a)
1537
+ });
1538
+ invariant4(this._pushTracksTask, void 0, {
1539
+ F: __dxlog_file5,
1540
+ L: 307,
1541
+ S: this,
1542
+ A: [
1543
+ "this._pushTracksTask",
1544
+ ""
1545
+ ]
1546
+ });
1547
+ this._pushTracksTask.schedule();
1412
1548
  }
1413
- this.stateUpdated.emit(this._state);
1414
1549
  }
1415
1550
  async _pullTrack(name) {
1416
1551
  const ctx = this._ctx.derive();
1417
1552
  try {
1418
1553
  const trackData = TrackNameCodec.decode(name);
1419
1554
  const track = await this._state.peer.pullTrack({
1420
- trackData,
1555
+ trackData: {
1556
+ ...trackData,
1557
+ mid: void 0
1558
+ },
1421
1559
  ctx
1422
1560
  });
1423
1561
  if (track?.readyState === "ended") {
@@ -1430,7 +1568,9 @@ var MediaManager = class extends Resource4 {
1430
1568
  ctx
1431
1569
  };
1432
1570
  ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
1433
- break;
1571
+ return {
1572
+ shouldRetry: false
1573
+ };
1434
1574
  }
1435
1575
  case "video": {
1436
1576
  const mediaStream = new MediaStream();
@@ -1444,43 +1584,68 @@ var MediaManager = class extends Resource4 {
1444
1584
  track.stop();
1445
1585
  delete this._state.pulledVideoStreams[name];
1446
1586
  });
1447
- break;
1587
+ return {
1588
+ shouldRetry: false
1589
+ };
1448
1590
  }
1449
1591
  default:
1450
1592
  throw new Error(`Invalid track kind: ${track?.kind}`);
1451
1593
  }
1452
1594
  } catch (err) {
1453
- log4.verbose("failed to pull track", {
1595
+ log4.info("failed to pull track", {
1454
1596
  err,
1455
1597
  name
1456
1598
  }, {
1457
1599
  F: __dxlog_file5,
1458
- L: 319,
1600
+ L: 343,
1459
1601
  S: this,
1460
1602
  C: (f, a) => f(...a)
1461
1603
  });
1462
1604
  void ctx.dispose();
1463
- await cancelWithContext2(this._ctx, sleep2(RETRY_INTERVAL));
1464
- log4.verbose("retrying pull track", {
1465
- name
1605
+ return {
1606
+ shouldRetry: true
1607
+ };
1608
+ }
1609
+ }
1610
+ async _maybePushTrack(track, previousTrack, encodings) {
1611
+ if (!track && !previousTrack) {
1612
+ return {
1613
+ track: void 0
1614
+ };
1615
+ }
1616
+ const ctx = this._ctx.derive();
1617
+ try {
1618
+ return {
1619
+ track: await this._state.peer.pushTrack({
1620
+ ctx,
1621
+ track: track ?? null,
1622
+ previousTrack,
1623
+ encodings
1624
+ })
1625
+ };
1626
+ } catch (err) {
1627
+ log4.info("failed to push track", {
1628
+ err,
1629
+ track,
1630
+ previousTrack,
1631
+ encodings
1466
1632
  }, {
1467
1633
  F: __dxlog_file5,
1468
- L: 322,
1634
+ L: 370,
1469
1635
  S: this,
1470
1636
  C: (f, a) => f(...a)
1471
1637
  });
1472
- this._pullTracksTask.schedule();
1638
+ void ctx.dispose();
1639
+ return {
1640
+ shouldRetry: true
1641
+ };
1473
1642
  }
1474
1643
  }
1475
- async _pushTrack(track, previousTrack, encodings) {
1476
- if (!track && !previousTrack) {
1477
- return;
1478
- }
1479
- return this._state.peer.pushTrack({
1480
- track: track ?? null,
1481
- previousTrack,
1482
- encodings
1483
- });
1644
+ constructor(...args) {
1645
+ super(...args), _define_property5(this, "stateUpdated", new Event3()), _define_property5(this, "_state", {
1646
+ pulledVideoStreams: {},
1647
+ pulledAudioTracks: {}
1648
+ }), _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);
1484
1649
  }
1485
1650
  };
1486
1651
  _ts_decorate2([
@@ -1490,20 +1655,33 @@ _ts_decorate2([
1490
1655
  synchronized2
1491
1656
  ], MediaManager.prototype, "leave", null);
1492
1657
 
1493
- // packages/plugins/plugin-thread/src/calls/call-manager.ts
1658
+ // src/calls/call-manager.ts
1494
1659
  import { computed } from "@preact/signals-core";
1495
1660
  import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
1496
1661
  import { Resource as Resource5 } from "@dxos/context";
1497
- import { invariant as invariant4 } from "@dxos/invariant";
1662
+ import { invariant as invariant5 } from "@dxos/invariant";
1498
1663
  import { live } from "@dxos/live-object";
1499
1664
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
1665
+ function _define_property6(obj, key, value) {
1666
+ if (key in obj) {
1667
+ Object.defineProperty(obj, key, {
1668
+ value,
1669
+ enumerable: true,
1670
+ configurable: true,
1671
+ writable: true
1672
+ });
1673
+ } else {
1674
+ obj[key] = value;
1675
+ }
1676
+ return obj;
1677
+ }
1500
1678
  function _ts_decorate3(decorators, target, key, desc) {
1501
1679
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1502
1680
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1503
1681
  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;
1504
1682
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1505
1683
  }
1506
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1684
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1507
1685
  var CallManager = class extends Resource5 {
1508
1686
  /** @reactive */
1509
1687
  get roomId() {
@@ -1538,8 +1716,8 @@ var CallManager = class extends Resource5 {
1538
1716
  return this._state.media;
1539
1717
  }
1540
1718
  /** @reactive */
1541
- get pulledAudioTracks() {
1542
- return Object.values(this._state.media.pulledAudioTracks).map((track) => track.track);
1719
+ get audioTracksToPlay() {
1720
+ return (this._state.call.users ?? []).map((user) => user.tracks?.audioEnabled ? user.tracks?.audio : void 0).filter(isNonNullable2).map((track) => this._state.media.pulledAudioTracks[track]?.track).filter(isNonNullable2);
1543
1721
  }
1544
1722
  /** @reactive */
1545
1723
  get state() {
@@ -1583,31 +1761,6 @@ var CallManager = class extends Resource5 {
1583
1761
  turnScreenshareOff() {
1584
1762
  return this._mediaManager.turnScreenshareOff();
1585
1763
  }
1586
- // TODO(burdon): Can this be mocked?
1587
- constructor(_client) {
1588
- super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
1589
- call: {},
1590
- media: {
1591
- pulledAudioTracks: {},
1592
- pulledVideoStreams: {}
1593
- }
1594
- }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1595
- this._client.config.getOrThrow("runtime.services.edge.url");
1596
- const networkService = this._client.services.services.NetworkService;
1597
- invariant4(networkService, "network service not found", {
1598
- F: __dxlog_file6,
1599
- L: 155,
1600
- S: this,
1601
- A: [
1602
- "networkService",
1603
- "'network service not found'"
1604
- ]
1605
- });
1606
- this._swarmSynchronizer = new CallSwarmSynchronizer({
1607
- networkService
1608
- });
1609
- this._mediaManager = new MediaManager();
1610
- }
1611
1764
  async _open() {
1612
1765
  await this._mediaManager.open();
1613
1766
  await this._swarmSynchronizer.open();
@@ -1648,7 +1801,7 @@ var CallManager = class extends Resource5 {
1648
1801
  this.roomId && this.left.emit(this.roomId);
1649
1802
  }
1650
1803
  _onCallStateUpdated(state) {
1651
- const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self?.id)?.flatMap((user) => [
1804
+ const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self.id)?.flatMap((user) => [
1652
1805
  user.tracks?.video,
1653
1806
  user.tracks?.audio,
1654
1807
  user.tracks?.screenshare
@@ -1681,6 +1834,37 @@ var CallManager = class extends Resource5 {
1681
1834
  this._state.call = this._swarmSynchronizer._getState();
1682
1835
  this._state.media = this._mediaManager._getState();
1683
1836
  }
1837
+ // TODO(burdon): Can this be mocked?
1838
+ constructor(_client) {
1839
+ super(), _define_property6(this, "_client", void 0), _define_property6(this, "callStateUpdated", void 0), // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
1840
+ _define_property6(this, "mediaStateUpdated", void 0), _define_property6(this, "left", void 0), /**
1841
+ * Live object state. Is changed on internal events.
1842
+ * CAUTION: Do not change directly.
1843
+ */
1844
+ _define_property6(this, "_state", void 0), // TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
1845
+ _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({
1846
+ call: {},
1847
+ media: {
1848
+ pulledAudioTracks: {},
1849
+ pulledVideoStreams: {}
1850
+ }
1851
+ }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1852
+ this._client.config.getOrThrow("runtime.services.edge.url");
1853
+ const networkService = this._client.services.services.NetworkService;
1854
+ invariant5(networkService, "network service not found", {
1855
+ F: __dxlog_file6,
1856
+ L: 159,
1857
+ S: this,
1858
+ A: [
1859
+ "networkService",
1860
+ "'network service not found'"
1861
+ ]
1862
+ });
1863
+ this._swarmSynchronizer = new CallSwarmSynchronizer({
1864
+ networkService
1865
+ });
1866
+ this._mediaManager = new MediaManager();
1867
+ }
1684
1868
  };
1685
1869
  _ts_decorate3([
1686
1870
  synchronized3
@@ -1699,10 +1883,8 @@ export {
1699
1883
  getUserMediaTrack,
1700
1884
  getDeviceList,
1701
1885
  getScreenshare,
1702
- createBlackCanvasStreamTrack,
1703
- createInaudibleAudioStreamTrack,
1704
1886
  SpeakingMonitor,
1705
1887
  MediaManager,
1706
1888
  CallManager
1707
1889
  };
1708
- //# sourceMappingURL=chunk-4H4A264L.mjs.map
1890
+ //# sourceMappingURL=chunk-ZCEU5K23.mjs.map