@dxos/plugin-thread 0.8.4-main.c1de068 → 0.8.4-main.dedc0f3

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 (249) hide show
  1. package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +16 -0
  2. package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs → ChatContainer-EXNNREYB.mjs} +4 -4
  3. package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-FHAOPO57.mjs} +5 -5
  4. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-RMPTWSTF.mjs} +4 -4
  6. package/dist/lib/browser/call-manager-RMPTWSTF.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
  8. package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-7W7QK5ZP.mjs} +232 -230
  10. package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-G4CNILRR.mjs +23 -0
  12. package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-G4CNILRR.mjs.map} +3 -3
  13. package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-KTWYVC5X.mjs} +22 -12
  14. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-PBMNFG3B.mjs +376 -0
  16. package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-RI3Z6MK3.mjs} +38 -6
  18. package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-RI3Z6MK3.mjs.map} +4 -4
  19. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-XYUJXHYV.mjs} +55 -5
  20. package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-ZCEU5K23.mjs} +461 -240
  22. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-ZH2WPTNP.mjs +618 -0
  24. package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +20 -9
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-J7OCP2P6.mjs} +67 -9
  28. package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +7 -0
  29. package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-Z677YORA.mjs} +4 -4
  30. package/dist/lib/browser/markdown-Z677YORA.mjs.map +7 -0
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/{react-root-X4UIVGTX.mjs → react-root-XKOD4KRB.mjs} +9 -9
  33. package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-GVGZRBDK.mjs} +9 -9
  34. package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +7 -0
  35. package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-GRKEID73.mjs} +2 -2
  36. package/dist/lib/browser/{state-H6CYONWE.mjs → state-2T4KDWBX.mjs} +2 -2
  37. package/dist/lib/browser/{state-H6CYONWE.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  38. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +80 -0
  39. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +1 -1
  41. package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs → ChannelContainer-KQQEZWUN.mjs} +7 -7
  42. package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-QVQKFBWA.mjs} +4 -4
  43. package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-XEYWX5FC.mjs} +5 -5
  44. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +7 -0
  45. package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-QAREJFVX.mjs} +4 -4
  46. package/dist/lib/node-esm/call-manager-QAREJFVX.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-2V3WSLUZ.mjs} +55 -5
  48. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-4T45PCKP.mjs +25 -0
  50. package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-4T45PCKP.mjs.map} +3 -3
  51. package/dist/lib/node-esm/chunk-DKCQCENK.mjs +377 -0
  52. package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-JNPKMT7O.mjs} +38 -6
  54. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-LE2LIYGX.mjs +619 -0
  56. package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-P6E247RF.mjs} +22 -12
  58. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
  60. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  61. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-SNKFZQST.mjs} +232 -230
  62. package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-TIPIOH2J.mjs} +461 -240
  64. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
  65. package/dist/lib/node-esm/index.mjs +20 -9
  66. package/dist/lib/node-esm/index.mjs.map +3 -3
  67. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-SR2LW4HF.mjs} +67 -9
  68. package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +7 -0
  69. package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-FL4IXLRP.mjs} +4 -4
  70. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +7 -0
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs → react-root-4JWDRIQB.mjs} +9 -9
  73. package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-WLQUVRAX.mjs} +9 -9
  74. package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +7 -0
  75. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-F2ODVNNW.mjs} +2 -2
  76. package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-62TQKQVB.mjs} +2 -2
  77. package/dist/lib/node-esm/{state-D7WNDT3N.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  78. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +81 -0
  79. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +1 -1
  81. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  82. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  83. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  84. package/dist/types/src/calls/media-manager.d.ts +1 -1
  85. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  86. package/dist/types/src/calls/types.d.ts +1 -1
  87. package/dist/types/src/calls/types.d.ts.map +1 -1
  88. package/dist/types/src/calls/util/calls-service.d.ts +4 -2
  89. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  90. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  91. package/dist/types/src/calls-service.stories.d.ts +10 -8
  92. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/call-manager.d.ts +1 -1
  96. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  98. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/index.d.ts +11 -10
  100. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  102. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  104. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  106. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  107. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/settings.d.ts +1 -1
  109. package/dist/types/src/capabilities/state.d.ts +2 -2
  110. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  112. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  113. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  114. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  115. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  116. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  117. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  118. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  119. package/dist/types/src/components/ChannelContainer.stories.d.ts +88 -3
  120. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Chat.stories.d.ts +90 -4
  122. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  124. package/dist/types/src/components/Comments.stories.d.ts +156 -3
  125. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  127. package/dist/types/src/components/CommentsThreadContainer.d.ts +2 -2
  128. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  130. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  131. package/dist/types/src/components/Media/VideoObject.stories.d.ts +15 -3
  132. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/MessageContainer.d.ts +4 -1
  134. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  136. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +154 -2
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +156 -3
  140. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  142. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  143. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  144. package/dist/types/src/components/testing.d.ts +1 -0
  145. package/dist/types/src/components/testing.d.ts.map +1 -1
  146. package/dist/types/src/extensions/threads.d.ts +2 -2
  147. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  148. package/dist/types/src/hooks/index.d.ts +1 -0
  149. package/dist/types/src/hooks/index.d.ts.map +1 -1
  150. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  151. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  152. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  153. package/dist/types/src/translations.d.ts +3 -1
  154. package/dist/types/src/translations.d.ts.map +1 -1
  155. package/dist/types/src/types/schema.d.ts +123 -108
  156. package/dist/types/src/types/schema.d.ts.map +1 -1
  157. package/dist/types/src/types/types.d.ts +255 -170
  158. package/dist/types/src/types/types.d.ts.map +1 -1
  159. package/dist/types/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +54 -50
  161. package/src/ThreadPlugin.tsx +9 -2
  162. package/src/calls/call-manager.ts +2 -2
  163. package/src/calls/call-swarm-synchronizer.ts +1 -1
  164. package/src/calls/media-manager.ts +60 -34
  165. package/src/calls/types.ts +8 -4
  166. package/src/calls/util/calls-service.ts +65 -14
  167. package/src/calls/util/stub-media-streams.ts +62 -5
  168. package/src/calls-service.stories.tsx +76 -60
  169. package/src/capabilities/app-graph-builder.ts +8 -5
  170. package/src/capabilities/call-manager.ts +3 -2
  171. package/src/capabilities/capabilities.ts +2 -2
  172. package/src/capabilities/index.ts +1 -0
  173. package/src/capabilities/intent-resolver.ts +38 -4
  174. package/src/capabilities/markdown.ts +4 -3
  175. package/src/capabilities/react-surface.tsx +5 -4
  176. package/src/capabilities/state.ts +2 -1
  177. package/src/capabilities/toolkit.ts +78 -0
  178. package/src/components/Call/Call.tsx +3 -2
  179. package/src/components/Call/Toolbar.tsx +5 -5
  180. package/src/components/CallDebugPanel.tsx +108 -49
  181. package/src/components/CallSidebar.tsx +2 -1
  182. package/src/components/ChannelContainer.stories.tsx +6 -5
  183. package/src/components/ChannelContainer.tsx +7 -6
  184. package/src/components/Chat.stories.tsx +28 -26
  185. package/src/components/ChatContainer.tsx +8 -4
  186. package/src/components/Comments.stories.tsx +33 -29
  187. package/src/components/CommentsContainer.tsx +2 -1
  188. package/src/components/CommentsThreadContainer.tsx +9 -7
  189. package/src/components/Lobby/Lobby.tsx +1 -1
  190. package/src/components/Media/VideoObject.stories.tsx +30 -27
  191. package/src/components/MessageContainer.tsx +43 -9
  192. package/src/components/Participant/Participant.tsx +13 -7
  193. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  194. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +6 -5
  195. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
  196. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  197. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  198. package/src/components/ThreadComplementary.tsx +38 -8
  199. package/src/components/ThreadSettings.tsx +2 -2
  200. package/src/components/command-extension.ts +5 -2
  201. package/src/components/testing.ts +22 -0
  202. package/src/extensions/threads.ts +6 -6
  203. package/src/hooks/index.ts +1 -0
  204. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  205. package/src/hooks/useDebugMode.ts +1 -1
  206. package/src/hooks/useVideoStreamTrack.tsx +5 -2
  207. package/src/testing/stories.ts +2 -2
  208. package/src/translations.ts +3 -1
  209. package/src/types/types.ts +21 -12
  210. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  211. package/src/typings.d.ts +8 -0
  212. package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
  213. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  214. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  215. package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
  216. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
  217. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
  219. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
  221. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-XLPJXUKO.mjs +0 -367
  223. package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  225. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  226. package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
  227. package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
  228. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  229. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  230. package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
  231. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  232. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  233. package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
  234. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  235. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
  236. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs.map +0 -7
  237. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
  238. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
  239. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  240. package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
  241. package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
  242. /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-4PYFOIDK.mjs.map} +0 -0
  243. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-EXNNREYB.mjs.map} +0 -0
  244. /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-XKOD4KRB.mjs.map} +0 -0
  245. /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-GRKEID73.mjs.map} +0 -0
  246. /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-KQQEZWUN.mjs.map} +0 -0
  247. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-QVQKFBWA.mjs.map} +0 -0
  248. /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-4JWDRIQB.mjs.map} +0 -0
  249. /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
@@ -1,11 +1,13 @@
1
1
  import {
2
2
  createBlackCanvasStreamTrack,
3
3
  createInaudibleAudioStreamTrack
4
- } from "./chunk-6NSMBO3B.mjs";
4
+ } from "./chunk-XYUJXHYV.mjs";
5
5
 
6
6
  // src/calls/types.ts
7
+ import { invariant } from "@dxos/invariant";
7
8
  import { buf } from "@dxos/protocols/buf";
8
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";
9
11
  var CALLS_URL = "https://calls-service.dxos.workers.dev";
10
12
  var codec = {
11
13
  encode: (message) => {
@@ -17,14 +19,42 @@ var codec = {
17
19
  };
18
20
  var TrackNameCodec = {
19
21
  encode: (trackData) => {
20
- 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;
21
50
  },
22
51
  decode: (name) => {
23
- const [sessionId, trackName] = name.split("/");
52
+ const [sessionId, trackName, mid] = name.split("/");
24
53
  return {
25
54
  sessionId,
26
55
  trackName,
27
- location: "remote"
56
+ location: "remote",
57
+ mid
28
58
  };
29
59
  }
30
60
  };
@@ -34,37 +64,35 @@ import md5Hex from "md5-hex";
34
64
  import { DeferredTask, Event, scheduleTaskInterval, synchronized } from "@dxos/async";
35
65
  import { Context, Resource } from "@dxos/context";
36
66
  import { generateName } from "@dxos/display-name";
37
- import { invariant } from "@dxos/invariant";
67
+ import { invariant as invariant2 } from "@dxos/invariant";
38
68
  import { PublicKey } from "@dxos/keys";
39
69
  import { log } from "@dxos/log";
40
70
  import { buf as buf2 } from "@dxos/protocols/buf";
41
71
  import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
42
72
  import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
43
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
+ }
44
87
  function _ts_decorate(decorators, target, key, desc) {
45
88
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
46
89
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
47
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;
48
91
  return c > 3 && r && Object.defineProperty(target, key, r), r;
49
92
  }
50
- var __dxlog_file = "/__w/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";
51
94
  var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
52
95
  var CallSwarmSynchronizer = class extends Resource {
53
- constructor({ networkService }) {
54
- super();
55
- this.stateUpdated = new Event();
56
- this._state = {
57
- activities: {}
58
- };
59
- this._lastSwarmEvent = void 0;
60
- this._reconcileSwarmStateTask = void 0;
61
- this._identityKey = void 0;
62
- this._deviceKey = void 0;
63
- this._displayName = void 0;
64
- this._swarmCtx = void 0;
65
- this._sendStateTask = void 0;
66
- this._networkService = networkService;
67
- }
68
96
  /**
69
97
  * @internal
70
98
  */
@@ -130,7 +158,7 @@ var CallSwarmSynchronizer = class extends Resource {
130
158
  log.verbose("joined to a different room", {
131
159
  roomId
132
160
  }, {
133
- F: __dxlog_file,
161
+ F: __dxlog_file2,
134
162
  L: 152,
135
163
  S: this,
136
164
  C: (f, a) => f(...a)
@@ -152,8 +180,8 @@ var CallSwarmSynchronizer = class extends Resource {
152
180
  this._reconcileSwarmStateTask = void 0;
153
181
  }
154
182
  async join() {
155
- invariant(this._state.roomId, void 0, {
156
- F: __dxlog_file,
183
+ invariant2(this._state.roomId, void 0, {
184
+ F: __dxlog_file2,
157
185
  L: 176,
158
186
  S: this,
159
187
  A: [
@@ -161,8 +189,8 @@ var CallSwarmSynchronizer = class extends Resource {
161
189
  ""
162
190
  ]
163
191
  });
164
- invariant(!this._swarmCtx, "Already joined", {
165
- F: __dxlog_file,
192
+ invariant2(!this._swarmCtx, "Already joined", {
193
+ F: __dxlog_file2,
166
194
  L: 177,
167
195
  S: this,
168
196
  A: [
@@ -171,7 +199,7 @@ var CallSwarmSynchronizer = class extends Resource {
171
199
  ]
172
200
  });
173
201
  this._swarmCtx = new Context(void 0, {
174
- F: __dxlog_file,
202
+ F: __dxlog_file2,
175
203
  L: 179
176
204
  });
177
205
  const topic = getTopic(this._state.roomId);
@@ -182,7 +210,7 @@ var CallSwarmSynchronizer = class extends Resource {
182
210
  peerKey: this._deviceKey
183
211
  }
184
212
  }, {
185
- F: __dxlog_file,
213
+ F: __dxlog_file2,
186
214
  L: 181,
187
215
  S: this,
188
216
  C: (f, a) => f(...a)
@@ -201,7 +229,7 @@ var CallSwarmSynchronizer = class extends Resource {
201
229
  peerKey: this._deviceKey
202
230
  }
203
231
  }, {
204
- F: __dxlog_file,
232
+ F: __dxlog_file2,
205
233
  L: 188,
206
234
  S: this,
207
235
  C: (f, a) => f(...a)
@@ -213,7 +241,7 @@ var CallSwarmSynchronizer = class extends Resource {
213
241
  peerKey: this._deviceKey
214
242
  }
215
243
  }).catch((err) => log.catch(err, void 0, {
216
- F: __dxlog_file,
244
+ F: __dxlog_file2,
217
245
  L: 194,
218
246
  S: this,
219
247
  C: (f, a) => f(...a)
@@ -281,8 +309,8 @@ var CallSwarmSynchronizer = class extends Resource {
281
309
  }
282
310
  async _reconcileSwarmState() {
283
311
  const swarmEvent = this._lastSwarmEvent;
284
- invariant(swarmEvent, void 0, {
285
- F: __dxlog_file,
312
+ invariant2(swarmEvent, void 0, {
313
+ F: __dxlog_file2,
286
314
  L: 273,
287
315
  S: this,
288
316
  A: [
@@ -302,7 +330,7 @@ var CallSwarmSynchronizer = class extends Resource {
302
330
  error,
303
331
  peer
304
332
  }, {
305
- F: __dxlog_file,
333
+ F: __dxlog_file2,
306
334
  L: 290,
307
335
  S: this,
308
336
  C: (f, a) => f(...a)
@@ -315,7 +343,7 @@ var CallSwarmSynchronizer = class extends Resource {
315
343
  log("reconciling swarm state", {
316
344
  users
317
345
  }, {
318
- F: __dxlog_file,
346
+ F: __dxlog_file2,
319
347
  L: 297,
320
348
  S: this,
321
349
  C: (f, a) => f(...a)
@@ -338,6 +366,12 @@ var CallSwarmSynchronizer = class extends Resource {
338
366
  scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
339
367
  }
340
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
+ }
341
375
  };
342
376
  _ts_decorate([
343
377
  synchronized
@@ -403,17 +437,26 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
403
437
  };
404
438
 
405
439
  // src/calls/util/calls-service.ts
406
- import { PersistentLifecycle } from "@dxos/async";
440
+ import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
407
441
  import { Resource as Resource2 } from "@dxos/context";
408
- import { invariant as invariant2 } from "@dxos/invariant";
442
+ import { invariant as invariant3 } from "@dxos/invariant";
409
443
  import { log as log2 } from "@dxos/log";
410
444
 
411
445
  // src/calls/util/history-cache.ts
412
- var HistoryCache = class {
413
- constructor(limit = 100) {
414
- this._limit = limit;
415
- this._messages = [];
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;
416
456
  }
457
+ return obj;
458
+ }
459
+ var HistoryCache = class {
417
460
  push(...messages) {
418
461
  if (this._messages.length >= this._limit) {
419
462
  this._messages.shift();
@@ -423,53 +466,98 @@ var HistoryCache = class {
423
466
  get() {
424
467
  return this._messages;
425
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
+ }
426
475
  };
427
476
 
428
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
+ }
429
518
  var DefaultBatchSizeLimit = 64;
519
+ var _schedulerChain = /* @__PURE__ */ new WeakMap();
430
520
  var FIFOScheduler = class {
431
- #schedulerChain;
432
- constructor() {
433
- this.#schedulerChain = Promise.resolve();
434
- }
435
521
  schedule(task) {
436
522
  return new Promise((resolve, reject) => {
437
- this.#schedulerChain = this.#schedulerChain.then(async () => {
523
+ _class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
438
524
  try {
439
525
  resolve(await task());
440
526
  } catch (error) {
441
527
  reject(error);
442
528
  }
443
- });
529
+ }));
444
530
  });
445
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
+ }
446
539
  };
540
+ var _currentBatch = /* @__PURE__ */ new WeakMap();
541
+ var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
542
+ var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
447
543
  var BulkRequestDispatcher = class {
448
- #currentBatch;
449
- #currentBulkResponse;
450
- #batchSizeLimit;
451
- constructor(batchSizeLimit = DefaultBatchSizeLimit) {
452
- this.#currentBatch = [];
453
- this.#currentBulkResponse = null;
454
- this.#batchSizeLimit = batchSizeLimit;
455
- }
456
544
  /**
457
545
  * Returns a bulk response promise.
458
546
  * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
459
547
  */
460
548
  doBulkRequest(params, bulkRequestFunc) {
461
- if (this.#currentBatch.length >= this.#batchSizeLimit) {
462
- this.#currentBatch = [];
463
- 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);
464
552
  }
465
- this.#currentBatch.push(params);
466
- if (this.#currentBulkResponse != null) {
467
- 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);
468
556
  }
469
- const batch = this.#currentBatch;
470
- 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) => {
471
559
  setTimeout(() => {
472
- this.#currentBulkResponse = null;
560
+ _class_private_field_set(this, _currentBulkResponse, null);
473
561
  const batchCopy = batch.splice(0, batch.length);
474
562
  bulkRequestFunc(batchCopy).then((result) => {
475
563
  resolve(result);
@@ -477,28 +565,45 @@ var BulkRequestDispatcher = class {
477
565
  reject(err);
478
566
  });
479
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
480
575
  });
481
- 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);
482
587
  }
483
588
  };
484
589
 
485
590
  // src/calls/util/calls-service.ts
486
- var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
487
- var NETWORK_TIMEOUT = 5e3;
488
- var CallsServicePeer = class extends Resource2 {
489
- constructor(config) {
490
- super();
491
- this.history = new HistoryCache(100);
492
- this._persistentLifecycle = new PersistentLifecycle({
493
- start: () => this._startSession(),
494
- stop: (session) => this._stopSession(session)
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
495
598
  });
496
- this.taskScheduler = new FIFOScheduler();
497
- this.pushTrackDispatcher = new BulkRequestDispatcher(32);
498
- this.pullTrackDispatcher = new BulkRequestDispatcher(32);
499
- this.closeTrackDispatcher = new BulkRequestDispatcher(32);
500
- this._config = config;
599
+ } else {
600
+ obj[key] = value;
501
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 {
502
607
  async _open(ctx) {
503
608
  await this._persistentLifecycle.open(ctx);
504
609
  }
@@ -526,11 +631,11 @@ var CallsServicePeer = class extends Resource2 {
526
631
  });
527
632
  peerConnection.addEventListener("connectionstatechange", () => {
528
633
  if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
529
- log2.warn("calls connection failed", {
634
+ log2.info("calls connection failed", {
530
635
  state: peerConnection.connectionState
531
636
  }, {
532
- F: __dxlog_file2,
533
- L: 118,
637
+ F: __dxlog_file3,
638
+ L: 121,
534
639
  S: this,
535
640
  C: (f, a) => f(...a)
536
641
  });
@@ -541,11 +646,11 @@ var CallsServicePeer = class extends Resource2 {
541
646
  peerConnection.addEventListener("iceconnectionstatechange", () => {
542
647
  clearTimeout(iceTimeout);
543
648
  if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
544
- log2.warn("calls connection to ICEs failed", {
649
+ log2.info("calls connection to ICEs failed", {
545
650
  state: peerConnection.iceConnectionState
546
651
  }, {
547
- F: __dxlog_file2,
548
- L: 127,
652
+ F: __dxlog_file3,
653
+ L: 130,
549
654
  S: this,
550
655
  C: (f, a) => f(...a)
551
656
  });
@@ -555,19 +660,19 @@ var CallsServicePeer = class extends Resource2 {
555
660
  iceTimeout = window.setTimeout(() => {
556
661
  if (peerConnection.iceConnectionState === "connected") {
557
662
  log2.info("calls iceConnectionState is connected", void 0, {
558
- F: __dxlog_file2,
559
- L: 136,
663
+ F: __dxlog_file3,
664
+ L: 139,
560
665
  S: this,
561
666
  C: (f, a) => f(...a)
562
667
  });
563
668
  return;
564
669
  }
565
- log2.warn("calls iceConnectionState timed out", {
670
+ log2.info("calls iceConnectionState timed out", {
566
671
  state: peerConnection.iceConnectionState,
567
672
  timeoutSeconds
568
673
  }, {
569
- F: __dxlog_file2,
570
- L: 140,
674
+ F: __dxlog_file3,
675
+ L: 143,
571
676
  S: this,
572
677
  C: (f, a) => f(...a)
573
678
  });
@@ -579,8 +684,8 @@ var CallsServicePeer = class extends Resource2 {
579
684
  }
580
685
  async _initiateCallSession() {
581
686
  log2("creating new session", void 0, {
582
- F: __dxlog_file2,
583
- L: 150,
687
+ F: __dxlog_file3,
688
+ L: 153,
584
689
  S: this,
585
690
  C: (f, a) => f(...a)
586
691
  });
@@ -591,6 +696,7 @@ var CallsServicePeer = class extends Resource2 {
591
696
  }
592
697
  async _fetch(relativePath, requestInit) {
593
698
  this.history.push({
699
+ endpoint: relativePath,
594
700
  type: "request",
595
701
  time: (/* @__PURE__ */ new Date()).toISOString(),
596
702
  method: requestInit?.method ?? "GET",
@@ -605,8 +711,8 @@ var CallsServicePeer = class extends Resource2 {
605
711
  status: response.status,
606
712
  text: await response.text()
607
713
  }, {
608
- F: __dxlog_file2,
609
- L: 165,
714
+ F: __dxlog_file3,
715
+ L: 169,
610
716
  S: this,
611
717
  C: (f, a) => f(...a)
612
718
  });
@@ -615,6 +721,7 @@ var CallsServicePeer = class extends Resource2 {
615
721
  try {
616
722
  const data = await response.clone().json();
617
723
  this.history.push({
724
+ endpoint: relativePath,
618
725
  type: "response",
619
726
  time: (/* @__PURE__ */ new Date()).toISOString(),
620
727
  status: response.status,
@@ -627,6 +734,7 @@ var CallsServicePeer = class extends Resource2 {
627
734
  } catch (error) {
628
735
  const text = await response.text();
629
736
  this.history.push({
737
+ endpoint: relativePath,
630
738
  type: "response",
631
739
  time: (/* @__PURE__ */ new Date()).toISOString(),
632
740
  status: response.status,
@@ -637,8 +745,8 @@ var CallsServicePeer = class extends Resource2 {
637
745
  text,
638
746
  status: response.status
639
747
  }, {
640
- F: __dxlog_file2,
641
- L: 190,
748
+ F: __dxlog_file3,
749
+ L: 196,
642
750
  S: this,
643
751
  C: (f, a) => f(...a)
644
752
  });
@@ -647,8 +755,8 @@ var CallsServicePeer = class extends Resource2 {
647
755
  }
648
756
  async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
649
757
  log2.verbose("pushing track ", trackName, {
650
- F: __dxlog_file2,
651
- L: 212,
758
+ F: __dxlog_file3,
759
+ L: 218,
652
760
  S: this,
653
761
  C: (f, a) => f(...a)
654
762
  });
@@ -673,9 +781,9 @@ var CallsServicePeer = class extends Resource2 {
673
781
  }))
674
782
  })
675
783
  });
676
- invariant2(response.tracks !== void 0, void 0, {
677
- F: __dxlog_file2,
678
- L: 237,
784
+ invariant3(response.tracks !== void 0, void 0, {
785
+ F: __dxlog_file3,
786
+ L: 243,
679
787
  S: this,
680
788
  A: [
681
789
  "response.tracks !== undefined",
@@ -689,7 +797,7 @@ var CallsServicePeer = class extends Resource2 {
689
797
  return {
690
798
  tracks: response.tracks
691
799
  };
692
- })).then(({ tracks }) => {
800
+ })).then(async ({ tracks }) => {
693
801
  const trackData = tracks.find((t) => t.mid === transceiver.mid);
694
802
  if (trackData) {
695
803
  return {
@@ -699,19 +807,12 @@ var CallsServicePeer = class extends Resource2 {
699
807
  };
700
808
  } else {
701
809
  log2.error("missing track data", void 0, {
702
- F: __dxlog_file2,
703
- L: 257,
810
+ F: __dxlog_file3,
811
+ L: 267,
704
812
  S: this,
705
813
  C: (f, a) => f(...a)
706
814
  });
707
815
  }
708
- }).catch((err) => {
709
- log2.catch(err, void 0, {
710
- F: __dxlog_file2,
711
- L: 261,
712
- S: this,
713
- C: (f, a) => f(...a)
714
- });
715
816
  });
716
817
  const onDispose = async () => {
717
818
  if (transceiver.mid) {
@@ -724,9 +825,9 @@ var CallsServicePeer = class extends Resource2 {
724
825
  }
725
826
  async pushTrack({ track, encodings = [], ctx, previousTrack }) {
726
827
  await this.waitUntilOpen();
727
- invariant2(this.session, void 0, {
728
- F: __dxlog_file2,
729
- L: 288,
828
+ invariant3(this.session, void 0, {
829
+ F: __dxlog_file3,
830
+ L: 295,
730
831
  S: this,
731
832
  A: [
732
833
  "this.session",
@@ -738,8 +839,8 @@ var CallsServicePeer = class extends Resource2 {
738
839
  previousTrack,
739
840
  encodings
740
841
  }, {
741
- F: __dxlog_file2,
742
- L: 289,
842
+ F: __dxlog_file3,
843
+ L: 296,
743
844
  S: this,
744
845
  C: (f, a) => f(...a)
745
846
  });
@@ -751,8 +852,8 @@ var CallsServicePeer = class extends Resource2 {
751
852
  previousTrack,
752
853
  transceiver: transceiver2
753
854
  }, {
754
- F: __dxlog_file2,
755
- L: 293,
855
+ F: __dxlog_file3,
856
+ L: 300,
756
857
  S: this,
757
858
  C: (f, a) => f(...a)
758
859
  });
@@ -763,23 +864,23 @@ var CallsServicePeer = class extends Resource2 {
763
864
  previousTrack,
764
865
  transceiver: transceiver2
765
866
  }, {
766
- F: __dxlog_file2,
767
- L: 296,
867
+ F: __dxlog_file3,
868
+ L: 303,
768
869
  S: this,
769
870
  C: (f, a) => f(...a)
770
871
  });
771
872
  transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
772
- F: __dxlog_file2,
773
- L: 297,
873
+ F: __dxlog_file3,
874
+ L: 304,
774
875
  S: this,
775
876
  C: (f, a) => f(...a)
776
877
  }));
777
878
  return previousTrack;
778
879
  }
779
880
  }
780
- invariant2(track, void 0, {
781
- F: __dxlog_file2,
782
- L: 301,
881
+ invariant3(track, void 0, {
882
+ F: __dxlog_file3,
883
+ L: 308,
783
884
  S: this,
784
885
  A: [
785
886
  "track",
@@ -791,8 +892,8 @@ var CallsServicePeer = class extends Resource2 {
791
892
  direction: "sendonly"
792
893
  });
793
894
  log2.verbose("creating transceiver", void 0, {
794
- F: __dxlog_file2,
795
- L: 306,
895
+ F: __dxlog_file3,
896
+ L: 313,
796
897
  S: this,
797
898
  C: (f, a) => f(...a)
798
899
  });
@@ -803,9 +904,9 @@ var CallsServicePeer = class extends Resource2 {
803
904
  sessionId: this.session.sessionId,
804
905
  trackName: stableId
805
906
  });
806
- invariant2(pushedTrackData, void 0, {
807
- F: __dxlog_file2,
808
- L: 315,
907
+ invariant3(pushedTrackData, void 0, {
908
+ F: __dxlog_file3,
909
+ L: 322,
809
910
  S: this,
810
911
  A: [
811
912
  "pushedTrackData",
@@ -821,8 +922,8 @@ var CallsServicePeer = class extends Resource2 {
821
922
  };
822
923
  });
823
924
  transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
824
- F: __dxlog_file2,
825
- L: 322,
925
+ F: __dxlog_file3,
926
+ L: 329,
826
927
  S: this,
827
928
  C: (f, a) => f(...a)
828
929
  }));
@@ -834,8 +935,8 @@ var CallsServicePeer = class extends Resource2 {
834
935
  log2("pulling track", {
835
936
  trackName: trackData.trackName
836
937
  }, {
837
- F: __dxlog_file2,
838
- L: 340,
938
+ F: __dxlog_file3,
939
+ L: 347,
839
940
  S: this,
840
941
  C: (f, a) => f(...a)
841
942
  });
@@ -849,9 +950,9 @@ var CallsServicePeer = class extends Resource2 {
849
950
  if (newTrackResponse.errorCode) {
850
951
  throw new Error(newTrackResponse.errorDescription);
851
952
  }
852
- invariant2(newTrackResponse.tracks, void 0, {
853
- F: __dxlog_file2,
854
- L: 353,
953
+ invariant3(newTrackResponse.tracks, void 0, {
954
+ F: __dxlog_file3,
955
+ L: 360,
855
956
  S: this,
856
957
  A: [
857
958
  "newTrackResponse.tracks",
@@ -897,18 +998,18 @@ var CallsServicePeer = class extends Resource2 {
897
998
  mid = trackInfo.mid;
898
999
  return track;
899
1000
  }).catch((err) => log2.catch(err, void 0, {
900
- F: __dxlog_file2,
901
- L: 405,
1001
+ F: __dxlog_file3,
1002
+ L: 412,
902
1003
  S: this,
903
1004
  C: (f, a) => f(...a)
904
1005
  }));
905
1006
  } else {
906
- log2.warn("missing track info", {
1007
+ log2.info("missing track info", {
907
1008
  trackData,
908
1009
  availableTracks: Array.from(trackMap.keys())
909
1010
  }, {
910
- F: __dxlog_file2,
911
- L: 407,
1011
+ F: __dxlog_file3,
1012
+ L: 414,
912
1013
  S: this,
913
1014
  C: (f, a) => f(...a)
914
1015
  });
@@ -917,8 +1018,8 @@ var CallsServicePeer = class extends Resource2 {
917
1018
  const onDispose = async () => {
918
1019
  if (mid) {
919
1020
  log2("closing pulled track ", trackData.trackName, {
920
- F: __dxlog_file2,
921
- L: 413,
1021
+ F: __dxlog_file3,
1022
+ L: 420,
922
1023
  S: this,
923
1024
  C: (f, a) => f(...a)
924
1025
  });
@@ -932,9 +1033,9 @@ var CallsServicePeer = class extends Resource2 {
932
1033
  }
933
1034
  async pullTrack({ ctx, trackData }) {
934
1035
  await this.waitUntilOpen();
935
- invariant2(this.session, void 0, {
936
- F: __dxlog_file2,
937
- L: 434,
1036
+ invariant3(this.session, void 0, {
1037
+ F: __dxlog_file3,
1038
+ L: 441,
938
1039
  S: this,
939
1040
  A: [
940
1041
  "this.session",
@@ -986,6 +1087,13 @@ var CallsServicePeer = class extends Resource2 {
986
1087
  }
987
1088
  }));
988
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
+ }
989
1097
  };
990
1098
  var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
991
1099
  setTimeout(reject, timeout);
@@ -1020,9 +1128,9 @@ var peerConnectionIsConnected = async (peerConnection) => {
1020
1128
 
1021
1129
  // src/calls/util/media.ts
1022
1130
  import { log as log3 } from "@dxos/log";
1023
- var __dxlog_file3 = "/__w/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";
1024
1132
  var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1025
- deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);
1133
+ deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
1026
1134
  const firstDevice = deviceList[0];
1027
1135
  if (!firstDevice) {
1028
1136
  throw new Error("No devices found");
@@ -1032,7 +1140,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1032
1140
  var acquireTrack = async (device, constraints) => {
1033
1141
  const { deviceId, label } = device;
1034
1142
  log3.info(`requesting ${label}`, void 0, {
1035
- F: __dxlog_file3,
1143
+ F: __dxlog_file4,
1036
1144
  L: 23,
1037
1145
  S: void 0,
1038
1146
  C: (f, a) => f(...a)
@@ -1077,14 +1185,24 @@ var getScreenshare = async ({ contentHint }) => {
1077
1185
  // src/calls/speaking-monitor.ts
1078
1186
  import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
1079
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
+ }
1080
1201
  var NOT_SPEAKING_AFTER = 500;
1081
1202
  var START_SPEAKING_THRESHOLD = 0.05;
1082
1203
  var CONTINUE_SPEAKING_THRESHOLD = 0.02;
1083
1204
  var MIN_EVENT_INTERVAL = 100;
1084
1205
  var SpeakingMonitor = class extends Resource3 {
1085
- constructor(_mediaStreamTrack) {
1086
- super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
1087
- }
1088
1206
  get isSpeaking() {
1089
1207
  return this._isSpeaking;
1090
1208
  }
@@ -1128,40 +1246,50 @@ var SpeakingMonitor = class extends Resource3 {
1128
1246
  this._lastEventTime = Date.now();
1129
1247
  this.speakingChanged.emit(this._isSpeaking);
1130
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
+ }
1131
1259
  };
1132
1260
 
1133
1261
  // src/calls/media-manager.ts
1134
1262
  import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
1135
- import { cancelWithContext, Resource as Resource4 } from "@dxos/context";
1263
+ import { Resource as Resource4, cancelWithContext } from "@dxos/context";
1264
+ import { invariant as invariant4 } from "@dxos/invariant";
1136
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
+ }
1137
1279
  function _ts_decorate2(decorators, target, key, desc) {
1138
1280
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1139
1281
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1140
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;
1141
1283
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1142
1284
  }
1143
- var __dxlog_file4 = "/__w/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";
1144
1286
  var VIDEO_WIDTH = 1280;
1145
1287
  var VIDEO_HEIGHT = 720;
1146
1288
  var MAX_WEB_CAM_FRAMERATE = 24;
1147
1289
  var MAX_WEB_CAM_BITRATE = 12e5;
1148
- var RETRY_INTERVAL = 500;
1149
- var USE_INAUDIBLE_AUDIO = false;
1290
+ var RETRY_INTERVAL = 100;
1291
+ var USE_INAUDIBLE_AUDIO = true;
1150
1292
  var MediaManager = class extends Resource4 {
1151
- constructor() {
1152
- super(...arguments);
1153
- this.stateUpdated = new Event3();
1154
- this._state = {
1155
- pulledVideoStreams: {},
1156
- pulledAudioTracks: {}
1157
- };
1158
- this._speakingMonitor = void 0;
1159
- this._trackToReconcile = [];
1160
- this._blackCanvasStreamTrack = void 0;
1161
- this._inaudibleAudioStreamTrack = void 0;
1162
- this._pushTracksTask = void 0;
1163
- this._pullTracksTask = void 0;
1164
- }
1165
1293
  get isSpeaking() {
1166
1294
  return this._speakingMonitor?.isSpeaking;
1167
1295
  }
@@ -1300,8 +1428,8 @@ var MediaManager = class extends Resource4 {
1300
1428
  }
1301
1429
  async _reconcilePulledMedia() {
1302
1430
  log4("reconciling tracks", void 0, {
1303
- F: __dxlog_file4,
1304
- L: 222,
1431
+ F: __dxlog_file5,
1432
+ L: 223,
1305
1433
  S: this,
1306
1434
  C: (f, a) => f(...a)
1307
1435
  });
@@ -1318,12 +1446,12 @@ var MediaManager = class extends Resource4 {
1318
1446
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
1319
1447
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1320
1448
  }, {
1321
- F: __dxlog_file4,
1322
- L: 241,
1449
+ F: __dxlog_file5,
1450
+ L: 242,
1323
1451
  S: this,
1324
1452
  C: (f, a) => f(...a)
1325
1453
  });
1326
- await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1454
+ const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1327
1455
  await Promise.all([
1328
1456
  ...audioTracksToClose,
1329
1457
  ...videoStreamsToClose
@@ -1332,55 +1460,102 @@ var MediaManager = class extends Resource4 {
1332
1460
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
1333
1461
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1334
1462
  }, {
1335
- F: __dxlog_file4,
1336
- L: 256,
1463
+ F: __dxlog_file5,
1464
+ L: 257,
1337
1465
  S: this,
1338
1466
  C: (f, a) => f(...a)
1339
1467
  });
1340
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
+ }
1341
1490
  }
1342
1491
  async _pushTracks() {
1343
1492
  if (!this._state.peer?.isOpen) {
1344
1493
  return;
1345
1494
  }
1346
1495
  let updated = false;
1347
- const [pushedVideoTrack, pushedAudioTrack, pushedScreenshareTrack] = await Promise.all([
1348
- 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, [
1349
1498
  {
1350
1499
  maxFramerate: MAX_WEB_CAM_FRAMERATE,
1351
1500
  maxBitrate: MAX_WEB_CAM_BITRATE
1352
1501
  }
1353
1502
  ]),
1354
- this._pushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1503
+ this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1355
1504
  {
1356
1505
  networkPriority: "high"
1357
1506
  }
1358
1507
  ]),
1359
- this._pushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1508
+ this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1360
1509
  ]);
1361
- if (pushedVideoTrack !== this._state.pushedVideoTrack) {
1362
- this._state.pushedVideoTrack = pushedVideoTrack;
1510
+ if (pushVideoResult.track !== this._state.pushedVideoTrack) {
1511
+ this._state.pushedVideoTrack = pushVideoResult.track;
1363
1512
  updated = true;
1364
1513
  }
1365
- if (pushedAudioTrack !== this._state.pushedAudioTrack) {
1366
- this._state.pushedAudioTrack = pushedAudioTrack;
1514
+ if (pushAudioResult.track !== this._state.pushedAudioTrack) {
1515
+ this._state.pushedAudioTrack = pushAudioResult.track;
1367
1516
  updated = true;
1368
1517
  }
1369
- if (pushedScreenshareTrack !== this._state.pushedScreenshareTrack) {
1370
- this._state.pushedScreenshareTrack = pushedScreenshareTrack;
1518
+ if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
1519
+ this._state.pushedScreenshareTrack = pushScreenshareResult.track;
1371
1520
  updated = true;
1372
1521
  }
1373
- if (!updated) {
1374
- 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();
1375
1548
  }
1376
- this.stateUpdated.emit(this._state);
1377
1549
  }
1378
1550
  async _pullTrack(name) {
1379
1551
  const ctx = this._ctx.derive();
1380
1552
  try {
1381
1553
  const trackData = TrackNameCodec.decode(name);
1382
1554
  const track = await this._state.peer.pullTrack({
1383
- trackData,
1555
+ trackData: {
1556
+ ...trackData,
1557
+ mid: void 0
1558
+ },
1384
1559
  ctx
1385
1560
  });
1386
1561
  if (track?.readyState === "ended") {
@@ -1393,7 +1568,9 @@ var MediaManager = class extends Resource4 {
1393
1568
  ctx
1394
1569
  };
1395
1570
  ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
1396
- break;
1571
+ return {
1572
+ shouldRetry: false
1573
+ };
1397
1574
  }
1398
1575
  case "video": {
1399
1576
  const mediaStream = new MediaStream();
@@ -1407,43 +1584,68 @@ var MediaManager = class extends Resource4 {
1407
1584
  track.stop();
1408
1585
  delete this._state.pulledVideoStreams[name];
1409
1586
  });
1410
- break;
1587
+ return {
1588
+ shouldRetry: false
1589
+ };
1411
1590
  }
1412
1591
  default:
1413
1592
  throw new Error(`Invalid track kind: ${track?.kind}`);
1414
1593
  }
1415
1594
  } catch (err) {
1416
- log4.verbose("failed to pull track", {
1595
+ log4.info("failed to pull track", {
1417
1596
  err,
1418
1597
  name
1419
1598
  }, {
1420
- F: __dxlog_file4,
1421
- L: 326,
1599
+ F: __dxlog_file5,
1600
+ L: 343,
1422
1601
  S: this,
1423
1602
  C: (f, a) => f(...a)
1424
1603
  });
1425
1604
  void ctx.dispose();
1426
- await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1427
- log4.verbose("retrying pull track", {
1428
- 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
1429
1632
  }, {
1430
- F: __dxlog_file4,
1431
- L: 329,
1633
+ F: __dxlog_file5,
1634
+ L: 370,
1432
1635
  S: this,
1433
1636
  C: (f, a) => f(...a)
1434
1637
  });
1435
- this._pullTracksTask.schedule();
1638
+ void ctx.dispose();
1639
+ return {
1640
+ shouldRetry: true
1641
+ };
1436
1642
  }
1437
1643
  }
1438
- async _pushTrack(track, previousTrack, encodings) {
1439
- if (!track && !previousTrack) {
1440
- return;
1441
- }
1442
- return this._state.peer.pushTrack({
1443
- track: track ?? null,
1444
- previousTrack,
1445
- encodings
1446
- });
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);
1447
1649
  }
1448
1650
  };
1449
1651
  _ts_decorate2([
@@ -1457,16 +1659,29 @@ _ts_decorate2([
1457
1659
  import { computed } from "@preact/signals-core";
1458
1660
  import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
1459
1661
  import { Resource as Resource5 } from "@dxos/context";
1460
- import { invariant as invariant3 } from "@dxos/invariant";
1662
+ import { invariant as invariant5 } from "@dxos/invariant";
1461
1663
  import { live } from "@dxos/live-object";
1462
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
+ }
1463
1678
  function _ts_decorate3(decorators, target, key, desc) {
1464
1679
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1465
1680
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1466
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;
1467
1682
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1468
1683
  }
1469
- var __dxlog_file5 = "/__w/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";
1470
1685
  var CallManager = class extends Resource5 {
1471
1686
  /** @reactive */
1472
1687
  get roomId() {
@@ -1546,31 +1761,6 @@ var CallManager = class extends Resource5 {
1546
1761
  turnScreenshareOff() {
1547
1762
  return this._mediaManager.turnScreenshareOff();
1548
1763
  }
1549
- // TODO(burdon): Can this be mocked?
1550
- constructor(_client) {
1551
- super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
1552
- call: {},
1553
- media: {
1554
- pulledAudioTracks: {},
1555
- pulledVideoStreams: {}
1556
- }
1557
- }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1558
- this._client.config.getOrThrow("runtime.services.edge.url");
1559
- const networkService = this._client.services.services.NetworkService;
1560
- invariant3(networkService, "network service not found", {
1561
- F: __dxlog_file5,
1562
- L: 159,
1563
- S: this,
1564
- A: [
1565
- "networkService",
1566
- "'network service not found'"
1567
- ]
1568
- });
1569
- this._swarmSynchronizer = new CallSwarmSynchronizer({
1570
- networkService
1571
- });
1572
- this._mediaManager = new MediaManager();
1573
- }
1574
1764
  async _open() {
1575
1765
  await this._mediaManager.open();
1576
1766
  await this._swarmSynchronizer.open();
@@ -1611,7 +1801,7 @@ var CallManager = class extends Resource5 {
1611
1801
  this.roomId && this.left.emit(this.roomId);
1612
1802
  }
1613
1803
  _onCallStateUpdated(state) {
1614
- 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) => [
1615
1805
  user.tracks?.video,
1616
1806
  user.tracks?.audio,
1617
1807
  user.tracks?.screenshare
@@ -1644,6 +1834,37 @@ var CallManager = class extends Resource5 {
1644
1834
  this._state.call = this._swarmSynchronizer._getState();
1645
1835
  this._state.media = this._mediaManager._getState();
1646
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
+ }
1647
1868
  };
1648
1869
  _ts_decorate3([
1649
1870
  synchronized3
@@ -1666,4 +1887,4 @@ export {
1666
1887
  MediaManager,
1667
1888
  CallManager
1668
1889
  };
1669
- //# sourceMappingURL=chunk-ZE7KWN36.mjs.map
1890
+ //# sourceMappingURL=chunk-ZCEU5K23.mjs.map