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