@dxos/plugin-thread 0.8.4-main.2e9d522 → 0.8.4-main.5ea62a8

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 (247) hide show
  1. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +16 -0
  2. package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs → ChatContainer-42ALOWUA.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-EW2QC6Q4.mjs} +4 -4
  6. package/dist/lib/browser/call-manager-EW2QC6Q4.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2I277V52.mjs +23 -0
  8. package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-2I277V52.mjs.map} +3 -3
  9. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-2P3GVRHP.mjs} +38 -6
  10. package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-2P3GVRHP.mjs.map} +4 -4
  11. package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
  12. package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  13. package/dist/lib/browser/chunk-H63NDV62.mjs +376 -0
  14. package/dist/lib/browser/chunk-H63NDV62.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-J26C57ZY.mjs +548 -0
  16. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-KEXJGF2R.mjs} +4 -4
  18. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-KTWYVC5X.mjs} +22 -12
  20. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-TQJYDFBU.mjs} +232 -230
  22. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-TUSBPMNU.mjs} +398 -174
  24. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +18 -8
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-IB5GYU2D.mjs} +68 -9
  28. package/dist/lib/browser/intent-resolver-IB5GYU2D.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-PTTTW2MO.mjs} +9 -9
  33. package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-X2VB6P37.mjs} +9 -9
  34. package/dist/lib/browser/react-surface-X2VB6P37.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-D5E2S6AI.mjs} +7 -7
  42. package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-4EGHKHIU.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-N3KASRDQ.mjs} +4 -4
  46. package/dist/lib/node-esm/call-manager-N3KASRDQ.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-CCE5LHBE.mjs} +232 -230
  48. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-CTZ75IFK.mjs} +38 -6
  50. package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-JR7KESLL.mjs} +398 -174
  52. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-NNKKNW57.mjs +549 -0
  54. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-P6E247RF.mjs} +22 -12
  56. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
  58. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  59. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-S3D7DTBF.mjs} +4 -4
  60. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs +377 -0
  62. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +25 -0
  64. package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-UJ2QNRLS.mjs.map} +3 -3
  65. package/dist/lib/node-esm/index.mjs +18 -8
  66. package/dist/lib/node-esm/index.mjs.map +3 -3
  67. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-VIMI5VLH.mjs} +68 -9
  68. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.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-2HHRRUME.mjs} +9 -9
  73. package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-OLN3XNND.mjs} +9 -9
  74. package/dist/lib/node-esm/react-surface-OLN3XNND.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 +2 -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.map +1 -1
  116. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  117. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/ChannelContainer.stories.d.ts +87 -3
  119. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Chat.stories.d.ts +89 -4
  121. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  123. package/dist/types/src/components/Comments.stories.d.ts +154 -3
  124. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  126. package/dist/types/src/components/CommentsThreadContainer.d.ts +2 -2
  127. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  128. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  129. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  130. package/dist/types/src/components/Media/VideoObject.stories.d.ts +15 -3
  131. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/MessageContainer.d.ts +4 -1
  133. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  135. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +152 -2
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +154 -3
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  141. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  142. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  143. package/dist/types/src/components/testing.d.ts +1 -0
  144. package/dist/types/src/components/testing.d.ts.map +1 -1
  145. package/dist/types/src/extensions/threads.d.ts +2 -2
  146. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  147. package/dist/types/src/hooks/index.d.ts +1 -0
  148. package/dist/types/src/hooks/index.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  150. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  151. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  152. package/dist/types/src/translations.d.ts +1 -0
  153. package/dist/types/src/translations.d.ts.map +1 -1
  154. package/dist/types/src/types/schema.d.ts +122 -107
  155. package/dist/types/src/types/schema.d.ts.map +1 -1
  156. package/dist/types/src/types/types.d.ts +253 -168
  157. package/dist/types/src/types/types.d.ts.map +1 -1
  158. package/dist/types/tsconfig.tsbuildinfo +1 -1
  159. package/package.json +51 -47
  160. package/src/ThreadPlugin.tsx +9 -2
  161. package/src/calls/call-manager.ts +1 -1
  162. package/src/calls/call-swarm-synchronizer.ts +1 -1
  163. package/src/calls/media-manager.ts +58 -33
  164. package/src/calls/types.ts +1 -1
  165. package/src/calls/util/calls-service.ts +56 -10
  166. package/src/calls/util/stub-media-streams.ts +4 -5
  167. package/src/calls-service.stories.tsx +76 -60
  168. package/src/capabilities/app-graph-builder.ts +8 -5
  169. package/src/capabilities/call-manager.ts +3 -2
  170. package/src/capabilities/capabilities.ts +2 -2
  171. package/src/capabilities/index.ts +1 -0
  172. package/src/capabilities/intent-resolver.ts +39 -4
  173. package/src/capabilities/markdown.ts +4 -3
  174. package/src/capabilities/react-surface.tsx +5 -4
  175. package/src/capabilities/state.ts +2 -1
  176. package/src/capabilities/toolkit.ts +78 -0
  177. package/src/components/Call/Call.tsx +3 -2
  178. package/src/components/Call/Toolbar.tsx +2 -2
  179. package/src/components/CallDebugPanel.tsx +1 -1
  180. package/src/components/CallSidebar.tsx +2 -1
  181. package/src/components/ChannelContainer.stories.tsx +6 -5
  182. package/src/components/ChannelContainer.tsx +7 -6
  183. package/src/components/Chat.stories.tsx +28 -26
  184. package/src/components/ChatContainer.tsx +8 -4
  185. package/src/components/Comments.stories.tsx +33 -29
  186. package/src/components/CommentsContainer.tsx +2 -1
  187. package/src/components/CommentsThreadContainer.tsx +9 -7
  188. package/src/components/Lobby/Lobby.tsx +1 -1
  189. package/src/components/Media/VideoObject.stories.tsx +30 -27
  190. package/src/components/MessageContainer.tsx +43 -9
  191. package/src/components/Participant/Participant.tsx +13 -7
  192. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  193. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +6 -5
  194. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
  195. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  196. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  197. package/src/components/ThreadComplementary.tsx +38 -8
  198. package/src/components/ThreadSettings.tsx +2 -2
  199. package/src/components/command-extension.ts +5 -2
  200. package/src/components/testing.ts +22 -0
  201. package/src/extensions/threads.ts +6 -6
  202. package/src/hooks/index.ts +1 -0
  203. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  204. package/src/hooks/useDebugMode.ts +1 -1
  205. package/src/hooks/useVideoStreamTrack.tsx +5 -2
  206. package/src/testing/stories.ts +2 -2
  207. package/src/translations.ts +1 -0
  208. package/src/types/types.ts +21 -12
  209. package/src/typings.d.ts +8 -0
  210. package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
  211. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  212. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  213. package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
  214. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
  215. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
  216. package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
  217. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
  219. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-XLPJXUKO.mjs +0 -367
  221. package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  223. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  224. package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
  225. package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
  226. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  227. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  228. package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
  229. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  230. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  231. package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
  232. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  233. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
  234. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs.map +0 -7
  235. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
  236. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
  237. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  238. package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
  239. package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
  240. /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-GHDNEZT2.mjs.map} +0 -0
  241. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-42ALOWUA.mjs.map} +0 -0
  242. /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-PTTTW2MO.mjs.map} +0 -0
  243. /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-GRKEID73.mjs.map} +0 -0
  244. /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-D5E2S6AI.mjs.map} +0 -0
  245. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-4EGHKHIU.mjs.map} +0 -0
  246. /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-2HHRRUME.mjs.map} +0 -0
  247. /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  createBlackCanvasStreamTrack,
4
4
  createInaudibleAudioStreamTrack
5
- } from "./chunk-OU5BYIDO.mjs";
5
+ } from "./chunk-S3D7DTBF.mjs";
6
6
 
7
7
  // src/calls/types.ts
8
8
  import { buf } from "@dxos/protocols/buf";
@@ -42,6 +42,19 @@ import { buf as buf2 } from "@dxos/protocols/buf";
42
42
  import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
43
43
  import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
44
44
  import { isNonNullable } from "@dxos/util";
45
+ function _define_property(obj, key, value) {
46
+ if (key in obj) {
47
+ Object.defineProperty(obj, key, {
48
+ value,
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true
52
+ });
53
+ } else {
54
+ obj[key] = value;
55
+ }
56
+ return obj;
57
+ }
45
58
  function _ts_decorate(decorators, target, key, desc) {
46
59
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
47
60
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -51,21 +64,6 @@ function _ts_decorate(decorators, target, key, desc) {
51
64
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
52
65
  var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
53
66
  var CallSwarmSynchronizer = class extends Resource {
54
- constructor({ networkService }) {
55
- super();
56
- this.stateUpdated = new Event();
57
- this._state = {
58
- activities: {}
59
- };
60
- this._lastSwarmEvent = void 0;
61
- this._reconcileSwarmStateTask = void 0;
62
- this._identityKey = void 0;
63
- this._deviceKey = void 0;
64
- this._displayName = void 0;
65
- this._swarmCtx = void 0;
66
- this._sendStateTask = void 0;
67
- this._networkService = networkService;
68
- }
69
67
  /**
70
68
  * @internal
71
69
  */
@@ -339,6 +337,12 @@ var CallSwarmSynchronizer = class extends Resource {
339
337
  scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
340
338
  }
341
339
  }
340
+ constructor({ networkService }) {
341
+ super(), _define_property(this, "stateUpdated", new Event()), _define_property(this, "_state", {
342
+ activities: {}
343
+ }), _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);
344
+ this._networkService = networkService;
345
+ }
342
346
  };
343
347
  _ts_decorate([
344
348
  synchronized
@@ -404,17 +408,26 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
404
408
  };
405
409
 
406
410
  // src/calls/util/calls-service.ts
407
- import { PersistentLifecycle } from "@dxos/async";
411
+ import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
408
412
  import { Resource as Resource2 } from "@dxos/context";
409
413
  import { invariant as invariant2 } from "@dxos/invariant";
410
414
  import { log as log2 } from "@dxos/log";
411
415
 
412
416
  // src/calls/util/history-cache.ts
413
- var HistoryCache = class {
414
- constructor(limit = 100) {
415
- this._limit = limit;
416
- this._messages = [];
417
+ function _define_property2(obj, key, value) {
418
+ if (key in obj) {
419
+ Object.defineProperty(obj, key, {
420
+ value,
421
+ enumerable: true,
422
+ configurable: true,
423
+ writable: true
424
+ });
425
+ } else {
426
+ obj[key] = value;
417
427
  }
428
+ return obj;
429
+ }
430
+ var HistoryCache = class {
418
431
  push(...messages) {
419
432
  if (this._messages.length >= this._limit) {
420
433
  this._messages.shift();
@@ -424,53 +437,98 @@ var HistoryCache = class {
424
437
  get() {
425
438
  return this._messages;
426
439
  }
440
+ constructor(limit = 100) {
441
+ _define_property2(this, "_limit", void 0);
442
+ _define_property2(this, "_messages", void 0);
443
+ this._limit = limit;
444
+ this._messages = [];
445
+ }
427
446
  };
428
447
 
429
448
  // src/calls/util/task-scheduling.ts
449
+ function _check_private_redeclaration(obj, privateCollection) {
450
+ if (privateCollection.has(obj)) {
451
+ throw new TypeError("Cannot initialize the same private elements twice on an object");
452
+ }
453
+ }
454
+ function _class_apply_descriptor_get(receiver, descriptor) {
455
+ if (descriptor.get) {
456
+ return descriptor.get.call(receiver);
457
+ }
458
+ return descriptor.value;
459
+ }
460
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
461
+ if (descriptor.set) {
462
+ descriptor.set.call(receiver, value);
463
+ } else {
464
+ if (!descriptor.writable) {
465
+ throw new TypeError("attempted to set read only private field");
466
+ }
467
+ descriptor.value = value;
468
+ }
469
+ }
470
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
471
+ if (!privateMap.has(receiver)) {
472
+ throw new TypeError("attempted to " + action + " private field on non-instance");
473
+ }
474
+ return privateMap.get(receiver);
475
+ }
476
+ function _class_private_field_get(receiver, privateMap) {
477
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
478
+ return _class_apply_descriptor_get(receiver, descriptor);
479
+ }
480
+ function _class_private_field_init(obj, privateMap, value) {
481
+ _check_private_redeclaration(obj, privateMap);
482
+ privateMap.set(obj, value);
483
+ }
484
+ function _class_private_field_set(receiver, privateMap, value) {
485
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
486
+ _class_apply_descriptor_set(receiver, descriptor, value);
487
+ return value;
488
+ }
430
489
  var DefaultBatchSizeLimit = 64;
490
+ var _schedulerChain = /* @__PURE__ */ new WeakMap();
431
491
  var FIFOScheduler = class {
432
- #schedulerChain;
433
- constructor() {
434
- this.#schedulerChain = Promise.resolve();
435
- }
436
492
  schedule(task) {
437
493
  return new Promise((resolve, reject) => {
438
- this.#schedulerChain = this.#schedulerChain.then(async () => {
494
+ _class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
439
495
  try {
440
496
  resolve(await task());
441
497
  } catch (error) {
442
498
  reject(error);
443
499
  }
444
- });
500
+ }));
501
+ });
502
+ }
503
+ constructor() {
504
+ _class_private_field_init(this, _schedulerChain, {
505
+ writable: true,
506
+ value: void 0
445
507
  });
508
+ _class_private_field_set(this, _schedulerChain, Promise.resolve());
446
509
  }
447
510
  };
511
+ var _currentBatch = /* @__PURE__ */ new WeakMap();
512
+ var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
513
+ var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
448
514
  var BulkRequestDispatcher = class {
449
- #currentBatch;
450
- #currentBulkResponse;
451
- #batchSizeLimit;
452
- constructor(batchSizeLimit = DefaultBatchSizeLimit) {
453
- this.#currentBatch = [];
454
- this.#currentBulkResponse = null;
455
- this.#batchSizeLimit = batchSizeLimit;
456
- }
457
515
  /**
458
516
  * Returns a bulk response promise.
459
517
  * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
460
518
  */
461
519
  doBulkRequest(params, bulkRequestFunc) {
462
- if (this.#currentBatch.length >= this.#batchSizeLimit) {
463
- this.#currentBatch = [];
464
- this.#currentBulkResponse = null;
520
+ if (_class_private_field_get(this, _currentBatch).length >= _class_private_field_get(this, _batchSizeLimit)) {
521
+ _class_private_field_set(this, _currentBatch, []);
522
+ _class_private_field_set(this, _currentBulkResponse, null);
465
523
  }
466
- this.#currentBatch.push(params);
467
- if (this.#currentBulkResponse != null) {
468
- return this.#currentBulkResponse;
524
+ _class_private_field_get(this, _currentBatch).push(params);
525
+ if (_class_private_field_get(this, _currentBulkResponse) != null) {
526
+ return _class_private_field_get(this, _currentBulkResponse);
469
527
  }
470
- const batch = this.#currentBatch;
471
- this.#currentBulkResponse = new Promise((resolve, reject) => {
528
+ const batch = _class_private_field_get(this, _currentBatch);
529
+ _class_private_field_set(this, _currentBulkResponse, new Promise((resolve, reject) => {
472
530
  setTimeout(() => {
473
- this.#currentBulkResponse = null;
531
+ _class_private_field_set(this, _currentBulkResponse, null);
474
532
  const batchCopy = batch.splice(0, batch.length);
475
533
  bulkRequestFunc(batchCopy).then((result) => {
476
534
  resolve(result);
@@ -478,28 +536,45 @@ var BulkRequestDispatcher = class {
478
536
  reject(err);
479
537
  });
480
538
  }, 0);
539
+ }));
540
+ return _class_private_field_get(this, _currentBulkResponse);
541
+ }
542
+ constructor(batchSizeLimit = DefaultBatchSizeLimit) {
543
+ _class_private_field_init(this, _currentBatch, {
544
+ writable: true,
545
+ value: void 0
546
+ });
547
+ _class_private_field_init(this, _currentBulkResponse, {
548
+ writable: true,
549
+ value: void 0
481
550
  });
482
- return this.#currentBulkResponse;
551
+ _class_private_field_init(this, _batchSizeLimit, {
552
+ writable: true,
553
+ value: void 0
554
+ });
555
+ _class_private_field_set(this, _currentBatch, []);
556
+ _class_private_field_set(this, _currentBulkResponse, null);
557
+ _class_private_field_set(this, _batchSizeLimit, batchSizeLimit);
483
558
  }
484
559
  };
485
560
 
486
561
  // src/calls/util/calls-service.ts
562
+ function _define_property3(obj, key, value) {
563
+ if (key in obj) {
564
+ Object.defineProperty(obj, key, {
565
+ value,
566
+ enumerable: true,
567
+ configurable: true,
568
+ writable: true
569
+ });
570
+ } else {
571
+ obj[key] = value;
572
+ }
573
+ return obj;
574
+ }
487
575
  var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
488
576
  var NETWORK_TIMEOUT = 5e3;
489
577
  var CallsServicePeer = class extends Resource2 {
490
- constructor(config) {
491
- super();
492
- this.history = new HistoryCache(100);
493
- this._persistentLifecycle = new PersistentLifecycle({
494
- start: () => this._startSession(),
495
- stop: (session) => this._stopSession(session)
496
- });
497
- this.taskScheduler = new FIFOScheduler();
498
- this.pushTrackDispatcher = new BulkRequestDispatcher(32);
499
- this.pullTrackDispatcher = new BulkRequestDispatcher(32);
500
- this.closeTrackDispatcher = new BulkRequestDispatcher(32);
501
- this._config = config;
502
- }
503
578
  async _open(ctx) {
504
579
  await this._persistentLifecycle.open(ctx);
505
580
  }
@@ -531,7 +606,7 @@ var CallsServicePeer = class extends Resource2 {
531
606
  state: peerConnection.connectionState
532
607
  }, {
533
608
  F: __dxlog_file2,
534
- L: 118,
609
+ L: 119,
535
610
  S: this,
536
611
  C: (f, a) => f(...a)
537
612
  });
@@ -546,7 +621,7 @@ var CallsServicePeer = class extends Resource2 {
546
621
  state: peerConnection.iceConnectionState
547
622
  }, {
548
623
  F: __dxlog_file2,
549
- L: 127,
624
+ L: 128,
550
625
  S: this,
551
626
  C: (f, a) => f(...a)
552
627
  });
@@ -557,7 +632,7 @@ var CallsServicePeer = class extends Resource2 {
557
632
  if (peerConnection.iceConnectionState === "connected") {
558
633
  log2.info("calls iceConnectionState is connected", void 0, {
559
634
  F: __dxlog_file2,
560
- L: 136,
635
+ L: 137,
561
636
  S: this,
562
637
  C: (f, a) => f(...a)
563
638
  });
@@ -568,7 +643,7 @@ var CallsServicePeer = class extends Resource2 {
568
643
  timeoutSeconds
569
644
  }, {
570
645
  F: __dxlog_file2,
571
- L: 140,
646
+ L: 141,
572
647
  S: this,
573
648
  C: (f, a) => f(...a)
574
649
  });
@@ -581,7 +656,7 @@ var CallsServicePeer = class extends Resource2 {
581
656
  async _initiateCallSession() {
582
657
  log2("creating new session", void 0, {
583
658
  F: __dxlog_file2,
584
- L: 150,
659
+ L: 151,
585
660
  S: this,
586
661
  C: (f, a) => f(...a)
587
662
  });
@@ -607,7 +682,7 @@ var CallsServicePeer = class extends Resource2 {
607
682
  text: await response.text()
608
683
  }, {
609
684
  F: __dxlog_file2,
610
- L: 165,
685
+ L: 166,
611
686
  S: this,
612
687
  C: (f, a) => f(...a)
613
688
  });
@@ -639,7 +714,7 @@ var CallsServicePeer = class extends Resource2 {
639
714
  status: response.status
640
715
  }, {
641
716
  F: __dxlog_file2,
642
- L: 190,
717
+ L: 191,
643
718
  S: this,
644
719
  C: (f, a) => f(...a)
645
720
  });
@@ -649,7 +724,7 @@ var CallsServicePeer = class extends Resource2 {
649
724
  async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
650
725
  log2.verbose("pushing track ", trackName, {
651
726
  F: __dxlog_file2,
652
- L: 212,
727
+ L: 213,
653
728
  S: this,
654
729
  C: (f, a) => f(...a)
655
730
  });
@@ -676,7 +751,7 @@ var CallsServicePeer = class extends Resource2 {
676
751
  });
677
752
  invariant2(response.tracks !== void 0, void 0, {
678
753
  F: __dxlog_file2,
679
- L: 237,
754
+ L: 238,
680
755
  S: this,
681
756
  A: [
682
757
  "response.tracks !== undefined",
@@ -690,9 +765,10 @@ var CallsServicePeer = class extends Resource2 {
690
765
  return {
691
766
  tracks: response.tracks
692
767
  };
693
- })).then(({ tracks }) => {
768
+ })).then(async ({ tracks }) => {
694
769
  const trackData = tracks.find((t) => t.mid === transceiver.mid);
695
770
  if (trackData) {
771
+ await waitForTransceiverToSendData(ctx, transceiver);
696
772
  return {
697
773
  ...trackData,
698
774
  sessionId,
@@ -701,18 +777,11 @@ var CallsServicePeer = class extends Resource2 {
701
777
  } else {
702
778
  log2.error("missing track data", void 0, {
703
779
  F: __dxlog_file2,
704
- L: 257,
780
+ L: 262,
705
781
  S: this,
706
782
  C: (f, a) => f(...a)
707
783
  });
708
784
  }
709
- }).catch((err) => {
710
- log2.catch(err, void 0, {
711
- F: __dxlog_file2,
712
- L: 261,
713
- S: this,
714
- C: (f, a) => f(...a)
715
- });
716
785
  });
717
786
  const onDispose = async () => {
718
787
  if (transceiver.mid) {
@@ -727,7 +796,7 @@ var CallsServicePeer = class extends Resource2 {
727
796
  await this.waitUntilOpen();
728
797
  invariant2(this.session, void 0, {
729
798
  F: __dxlog_file2,
730
- L: 288,
799
+ L: 290,
731
800
  S: this,
732
801
  A: [
733
802
  "this.session",
@@ -740,7 +809,7 @@ var CallsServicePeer = class extends Resource2 {
740
809
  encodings
741
810
  }, {
742
811
  F: __dxlog_file2,
743
- L: 289,
812
+ L: 291,
744
813
  S: this,
745
814
  C: (f, a) => f(...a)
746
815
  });
@@ -753,7 +822,7 @@ var CallsServicePeer = class extends Resource2 {
753
822
  transceiver: transceiver2
754
823
  }, {
755
824
  F: __dxlog_file2,
756
- L: 293,
825
+ L: 295,
757
826
  S: this,
758
827
  C: (f, a) => f(...a)
759
828
  });
@@ -765,13 +834,13 @@ var CallsServicePeer = class extends Resource2 {
765
834
  transceiver: transceiver2
766
835
  }, {
767
836
  F: __dxlog_file2,
768
- L: 296,
837
+ L: 298,
769
838
  S: this,
770
839
  C: (f, a) => f(...a)
771
840
  });
772
841
  transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
773
842
  F: __dxlog_file2,
774
- L: 297,
843
+ L: 299,
775
844
  S: this,
776
845
  C: (f, a) => f(...a)
777
846
  }));
@@ -780,7 +849,7 @@ var CallsServicePeer = class extends Resource2 {
780
849
  }
781
850
  invariant2(track, void 0, {
782
851
  F: __dxlog_file2,
783
- L: 301,
852
+ L: 303,
784
853
  S: this,
785
854
  A: [
786
855
  "track",
@@ -793,7 +862,7 @@ var CallsServicePeer = class extends Resource2 {
793
862
  });
794
863
  log2.verbose("creating transceiver", void 0, {
795
864
  F: __dxlog_file2,
796
- L: 306,
865
+ L: 308,
797
866
  S: this,
798
867
  C: (f, a) => f(...a)
799
868
  });
@@ -806,7 +875,7 @@ var CallsServicePeer = class extends Resource2 {
806
875
  });
807
876
  invariant2(pushedTrackData, void 0, {
808
877
  F: __dxlog_file2,
809
- L: 315,
878
+ L: 317,
810
879
  S: this,
811
880
  A: [
812
881
  "pushedTrackData",
@@ -823,7 +892,7 @@ var CallsServicePeer = class extends Resource2 {
823
892
  });
824
893
  transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
825
894
  F: __dxlog_file2,
826
- L: 322,
895
+ L: 324,
827
896
  S: this,
828
897
  C: (f, a) => f(...a)
829
898
  }));
@@ -836,7 +905,7 @@ var CallsServicePeer = class extends Resource2 {
836
905
  trackName: trackData.trackName
837
906
  }, {
838
907
  F: __dxlog_file2,
839
- L: 340,
908
+ L: 342,
840
909
  S: this,
841
910
  C: (f, a) => f(...a)
842
911
  });
@@ -852,7 +921,7 @@ var CallsServicePeer = class extends Resource2 {
852
921
  }
853
922
  invariant2(newTrackResponse.tracks, void 0, {
854
923
  F: __dxlog_file2,
855
- L: 353,
924
+ L: 355,
856
925
  S: this,
857
926
  A: [
858
927
  "newTrackResponse.tracks",
@@ -899,7 +968,7 @@ var CallsServicePeer = class extends Resource2 {
899
968
  return track;
900
969
  }).catch((err) => log2.catch(err, void 0, {
901
970
  F: __dxlog_file2,
902
- L: 405,
971
+ L: 407,
903
972
  S: this,
904
973
  C: (f, a) => f(...a)
905
974
  }));
@@ -909,7 +978,7 @@ var CallsServicePeer = class extends Resource2 {
909
978
  availableTracks: Array.from(trackMap.keys())
910
979
  }, {
911
980
  F: __dxlog_file2,
912
- L: 407,
981
+ L: 409,
913
982
  S: this,
914
983
  C: (f, a) => f(...a)
915
984
  });
@@ -919,7 +988,7 @@ var CallsServicePeer = class extends Resource2 {
919
988
  if (mid) {
920
989
  log2("closing pulled track ", trackData.trackName, {
921
990
  F: __dxlog_file2,
922
- L: 413,
991
+ L: 415,
923
992
  S: this,
924
993
  C: (f, a) => f(...a)
925
994
  });
@@ -935,7 +1004,7 @@ var CallsServicePeer = class extends Resource2 {
935
1004
  await this.waitUntilOpen();
936
1005
  invariant2(this.session, void 0, {
937
1006
  F: __dxlog_file2,
938
- L: 434,
1007
+ L: 436,
939
1008
  S: this,
940
1009
  A: [
941
1010
  "this.session",
@@ -987,6 +1056,13 @@ var CallsServicePeer = class extends Resource2 {
987
1056
  }
988
1057
  }));
989
1058
  }
1059
+ constructor(config) {
1060
+ super(), _define_property3(this, "history", new HistoryCache(100)), _define_property3(this, "_persistentLifecycle", new PersistentLifecycle({
1061
+ start: () => this._startSession(),
1062
+ stop: (session) => this._stopSession(session)
1063
+ })), _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));
1064
+ this._config = config;
1065
+ }
990
1066
  };
991
1067
  var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
992
1068
  setTimeout(reject, timeout);
@@ -1018,12 +1094,50 @@ var peerConnectionIsConnected = async (peerConnection) => {
1018
1094
  await connected;
1019
1095
  }
1020
1096
  };
1097
+ var INITIAL_DELAY = 50;
1098
+ var MAX_DELAY = 500;
1099
+ var MAX_RETRIES = 50;
1100
+ var WAIT_FOR_DATA_TIMEOUT = 2e4;
1101
+ var waitForTransceiverToSendData = async (ctx, transceiver) => {
1102
+ let delay = INITIAL_DELAY;
1103
+ let checks = 0;
1104
+ const waitForData = new Trigger();
1105
+ ctx.onDispose(() => waitForData.throw(new Error("Transceiver was closed")));
1106
+ const checkStats = async () => {
1107
+ if (ctx.disposed) return;
1108
+ try {
1109
+ const stats = await transceiver.sender.getStats();
1110
+ let dataFound = false;
1111
+ stats.forEach((stat) => {
1112
+ if (stat.type === "outbound-rtp" && stat.bytesSent > 0) {
1113
+ dataFound = true;
1114
+ }
1115
+ });
1116
+ if (dataFound) {
1117
+ waitForData.wake();
1118
+ return;
1119
+ }
1120
+ } catch {
1121
+ }
1122
+ checks++;
1123
+ if (checks > MAX_RETRIES) {
1124
+ waitForData.throw(new Error("Transceiver did not send data"));
1125
+ return;
1126
+ }
1127
+ delay = Math.min(delay * 2, MAX_DELAY);
1128
+ scheduleTask(ctx, checkStats, delay);
1129
+ };
1130
+ void checkStats();
1131
+ return waitForData.wait({
1132
+ timeout: WAIT_FOR_DATA_TIMEOUT
1133
+ });
1134
+ };
1021
1135
 
1022
1136
  // src/calls/util/media.ts
1023
1137
  import { log as log3 } from "@dxos/log";
1024
1138
  var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
1025
1139
  var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1026
- deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);
1140
+ deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
1027
1141
  const firstDevice = deviceList[0];
1028
1142
  if (!firstDevice) {
1029
1143
  throw new Error("No devices found");
@@ -1078,14 +1192,24 @@ var getScreenshare = async ({ contentHint }) => {
1078
1192
  // src/calls/speaking-monitor.ts
1079
1193
  import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
1080
1194
  import { Resource as Resource3 } from "@dxos/context";
1195
+ function _define_property4(obj, key, value) {
1196
+ if (key in obj) {
1197
+ Object.defineProperty(obj, key, {
1198
+ value,
1199
+ enumerable: true,
1200
+ configurable: true,
1201
+ writable: true
1202
+ });
1203
+ } else {
1204
+ obj[key] = value;
1205
+ }
1206
+ return obj;
1207
+ }
1081
1208
  var NOT_SPEAKING_AFTER = 500;
1082
1209
  var START_SPEAKING_THRESHOLD = 0.05;
1083
1210
  var CONTINUE_SPEAKING_THRESHOLD = 0.02;
1084
1211
  var MIN_EVENT_INTERVAL = 100;
1085
1212
  var SpeakingMonitor = class extends Resource3 {
1086
- constructor(_mediaStreamTrack) {
1087
- super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
1088
- }
1089
1213
  get isSpeaking() {
1090
1214
  return this._isSpeaking;
1091
1215
  }
@@ -1129,12 +1253,36 @@ var SpeakingMonitor = class extends Resource3 {
1129
1253
  this._lastEventTime = Date.now();
1130
1254
  this.speakingChanged.emit(this._isSpeaking);
1131
1255
  }
1256
+ constructor(_mediaStreamTrack) {
1257
+ super(), _define_property4(this, "_mediaStreamTrack", void 0), /**
1258
+ * Event that is emitted when the user starts or stops speaking.
1259
+ * It is debounced to prevent rapid state changes.
1260
+ */
1261
+ _define_property4(this, "speakingChanged", void 0), /**
1262
+ * Real state of the user speaking.
1263
+ */
1264
+ _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;
1265
+ }
1132
1266
  };
1133
1267
 
1134
1268
  // src/calls/media-manager.ts
1135
1269
  import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
1136
- import { cancelWithContext, Resource as Resource4 } from "@dxos/context";
1270
+ import { Resource as Resource4, cancelWithContext } from "@dxos/context";
1271
+ import { invariant as invariant3 } from "@dxos/invariant";
1137
1272
  import { log as log4 } from "@dxos/log";
1273
+ function _define_property5(obj, key, value) {
1274
+ if (key in obj) {
1275
+ Object.defineProperty(obj, key, {
1276
+ value,
1277
+ enumerable: true,
1278
+ configurable: true,
1279
+ writable: true
1280
+ });
1281
+ } else {
1282
+ obj[key] = value;
1283
+ }
1284
+ return obj;
1285
+ }
1138
1286
  function _ts_decorate2(decorators, target, key, desc) {
1139
1287
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1140
1288
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -1146,23 +1294,9 @@ var VIDEO_WIDTH = 1280;
1146
1294
  var VIDEO_HEIGHT = 720;
1147
1295
  var MAX_WEB_CAM_FRAMERATE = 24;
1148
1296
  var MAX_WEB_CAM_BITRATE = 12e5;
1149
- var RETRY_INTERVAL = 500;
1150
- var USE_INAUDIBLE_AUDIO = false;
1297
+ var RETRY_INTERVAL = 100;
1298
+ var USE_INAUDIBLE_AUDIO = true;
1151
1299
  var MediaManager = class extends Resource4 {
1152
- constructor() {
1153
- super(...arguments);
1154
- this.stateUpdated = new Event3();
1155
- this._state = {
1156
- pulledVideoStreams: {},
1157
- pulledAudioTracks: {}
1158
- };
1159
- this._speakingMonitor = void 0;
1160
- this._trackToReconcile = [];
1161
- this._blackCanvasStreamTrack = void 0;
1162
- this._inaudibleAudioStreamTrack = void 0;
1163
- this._pushTracksTask = void 0;
1164
- this._pullTracksTask = void 0;
1165
- }
1166
1300
  get isSpeaking() {
1167
1301
  return this._speakingMonitor?.isSpeaking;
1168
1302
  }
@@ -1302,7 +1436,7 @@ var MediaManager = class extends Resource4 {
1302
1436
  async _reconcilePulledMedia() {
1303
1437
  log4("reconciling tracks", void 0, {
1304
1438
  F: __dxlog_file4,
1305
- L: 222,
1439
+ L: 223,
1306
1440
  S: this,
1307
1441
  C: (f, a) => f(...a)
1308
1442
  });
@@ -1320,11 +1454,11 @@ var MediaManager = class extends Resource4 {
1320
1454
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1321
1455
  }, {
1322
1456
  F: __dxlog_file4,
1323
- L: 241,
1457
+ L: 242,
1324
1458
  S: this,
1325
1459
  C: (f, a) => f(...a)
1326
1460
  });
1327
- await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1461
+ const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1328
1462
  await Promise.all([
1329
1463
  ...audioTracksToClose,
1330
1464
  ...videoStreamsToClose
@@ -1334,47 +1468,91 @@ var MediaManager = class extends Resource4 {
1334
1468
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1335
1469
  }, {
1336
1470
  F: __dxlog_file4,
1337
- L: 256,
1471
+ L: 257,
1338
1472
  S: this,
1339
1473
  C: (f, a) => f(...a)
1340
1474
  });
1341
1475
  this.stateUpdated.emit(this._state);
1476
+ if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
1477
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1478
+ log4.info("retrying pull tracks", {
1479
+ tracksToPull
1480
+ }, {
1481
+ F: __dxlog_file4,
1482
+ L: 265,
1483
+ S: this,
1484
+ C: (f, a) => f(...a)
1485
+ });
1486
+ invariant3(this._pullTracksTask, void 0, {
1487
+ F: __dxlog_file4,
1488
+ L: 266,
1489
+ S: this,
1490
+ A: [
1491
+ "this._pullTracksTask",
1492
+ ""
1493
+ ]
1494
+ });
1495
+ this._pullTracksTask.schedule();
1496
+ }
1342
1497
  }
1343
1498
  async _pushTracks() {
1344
1499
  if (!this._state.peer?.isOpen) {
1345
1500
  return;
1346
1501
  }
1347
1502
  let updated = false;
1348
- const [pushedVideoTrack, pushedAudioTrack, pushedScreenshareTrack] = await Promise.all([
1349
- this._pushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1503
+ const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
1504
+ this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1350
1505
  {
1351
1506
  maxFramerate: MAX_WEB_CAM_FRAMERATE,
1352
1507
  maxBitrate: MAX_WEB_CAM_BITRATE
1353
1508
  }
1354
1509
  ]),
1355
- this._pushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1510
+ this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1356
1511
  {
1357
1512
  networkPriority: "high"
1358
1513
  }
1359
1514
  ]),
1360
- this._pushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1515
+ this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1361
1516
  ]);
1362
- if (pushedVideoTrack !== this._state.pushedVideoTrack) {
1363
- this._state.pushedVideoTrack = pushedVideoTrack;
1517
+ if (pushVideoResult.track !== this._state.pushedVideoTrack) {
1518
+ this._state.pushedVideoTrack = pushVideoResult.track;
1364
1519
  updated = true;
1365
1520
  }
1366
- if (pushedAudioTrack !== this._state.pushedAudioTrack) {
1367
- this._state.pushedAudioTrack = pushedAudioTrack;
1521
+ if (pushAudioResult.track !== this._state.pushedAudioTrack) {
1522
+ this._state.pushedAudioTrack = pushAudioResult.track;
1368
1523
  updated = true;
1369
1524
  }
1370
- if (pushedScreenshareTrack !== this._state.pushedScreenshareTrack) {
1371
- this._state.pushedScreenshareTrack = pushedScreenshareTrack;
1525
+ if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
1526
+ this._state.pushedScreenshareTrack = pushScreenshareResult.track;
1372
1527
  updated = true;
1373
1528
  }
1374
- if (!updated) {
1375
- return;
1529
+ const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
1530
+ if (updated) {
1531
+ this.stateUpdated.emit(this._state);
1532
+ }
1533
+ if (shouldRetry) {
1534
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1535
+ log4.info("retrying push tracks", {
1536
+ pushVideoResult,
1537
+ pushAudioResult,
1538
+ pushScreenshareResult
1539
+ }, {
1540
+ F: __dxlog_file4,
1541
+ L: 306,
1542
+ S: this,
1543
+ C: (f, a) => f(...a)
1544
+ });
1545
+ invariant3(this._pushTracksTask, void 0, {
1546
+ F: __dxlog_file4,
1547
+ L: 307,
1548
+ S: this,
1549
+ A: [
1550
+ "this._pushTracksTask",
1551
+ ""
1552
+ ]
1553
+ });
1554
+ this._pushTracksTask.schedule();
1376
1555
  }
1377
- this.stateUpdated.emit(this._state);
1378
1556
  }
1379
1557
  async _pullTrack(name) {
1380
1558
  const ctx = this._ctx.derive();
@@ -1394,7 +1572,9 @@ var MediaManager = class extends Resource4 {
1394
1572
  ctx
1395
1573
  };
1396
1574
  ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
1397
- break;
1575
+ return {
1576
+ shouldRetry: false
1577
+ };
1398
1578
  }
1399
1579
  case "video": {
1400
1580
  const mediaStream = new MediaStream();
@@ -1408,43 +1588,68 @@ var MediaManager = class extends Resource4 {
1408
1588
  track.stop();
1409
1589
  delete this._state.pulledVideoStreams[name];
1410
1590
  });
1411
- break;
1591
+ return {
1592
+ shouldRetry: false
1593
+ };
1412
1594
  }
1413
1595
  default:
1414
1596
  throw new Error(`Invalid track kind: ${track?.kind}`);
1415
1597
  }
1416
1598
  } catch (err) {
1417
- log4.verbose("failed to pull track", {
1599
+ log4.info("failed to pull track", {
1418
1600
  err,
1419
1601
  name
1420
1602
  }, {
1421
1603
  F: __dxlog_file4,
1422
- L: 326,
1604
+ L: 342,
1423
1605
  S: this,
1424
1606
  C: (f, a) => f(...a)
1425
1607
  });
1426
1608
  void ctx.dispose();
1427
- await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1428
- log4.verbose("retrying pull track", {
1429
- name
1609
+ return {
1610
+ shouldRetry: true
1611
+ };
1612
+ }
1613
+ }
1614
+ async _maybePushTrack(track, previousTrack, encodings) {
1615
+ if (!track && !previousTrack) {
1616
+ return {
1617
+ track: void 0
1618
+ };
1619
+ }
1620
+ const ctx = this._ctx.derive();
1621
+ try {
1622
+ return {
1623
+ track: await this._state.peer.pushTrack({
1624
+ ctx,
1625
+ track: track ?? null,
1626
+ previousTrack,
1627
+ encodings
1628
+ })
1629
+ };
1630
+ } catch (err) {
1631
+ log4.info("failed to push track", {
1632
+ err,
1633
+ track,
1634
+ previousTrack,
1635
+ encodings
1430
1636
  }, {
1431
1637
  F: __dxlog_file4,
1432
- L: 329,
1638
+ L: 369,
1433
1639
  S: this,
1434
1640
  C: (f, a) => f(...a)
1435
1641
  });
1436
- this._pullTracksTask.schedule();
1642
+ void ctx.dispose();
1643
+ return {
1644
+ shouldRetry: true
1645
+ };
1437
1646
  }
1438
1647
  }
1439
- async _pushTrack(track, previousTrack, encodings) {
1440
- if (!track && !previousTrack) {
1441
- return;
1442
- }
1443
- return this._state.peer.pushTrack({
1444
- track: track ?? null,
1445
- previousTrack,
1446
- encodings
1447
- });
1648
+ constructor(...args) {
1649
+ super(...args), _define_property5(this, "stateUpdated", new Event3()), _define_property5(this, "_state", {
1650
+ pulledVideoStreams: {},
1651
+ pulledAudioTracks: {}
1652
+ }), _define_property5(this, "_speakingMonitor", void 0), _define_property5(this, "_trackToReconcile", []), _define_property5(this, "_blackCanvasStreamTrack", void 0), _define_property5(this, "_inaudibleAudioStreamTrack", void 0), _define_property5(this, "_pushTracksTask", void 0), _define_property5(this, "_pullTracksTask", void 0);
1448
1653
  }
1449
1654
  };
1450
1655
  _ts_decorate2([
@@ -1458,9 +1663,22 @@ _ts_decorate2([
1458
1663
  import { computed } from "@preact/signals-core";
1459
1664
  import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
1460
1665
  import { Resource as Resource5 } from "@dxos/context";
1461
- import { invariant as invariant3 } from "@dxos/invariant";
1666
+ import { invariant as invariant4 } from "@dxos/invariant";
1462
1667
  import { live } from "@dxos/live-object";
1463
1668
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
1669
+ function _define_property6(obj, key, value) {
1670
+ if (key in obj) {
1671
+ Object.defineProperty(obj, key, {
1672
+ value,
1673
+ enumerable: true,
1674
+ configurable: true,
1675
+ writable: true
1676
+ });
1677
+ } else {
1678
+ obj[key] = value;
1679
+ }
1680
+ return obj;
1681
+ }
1464
1682
  function _ts_decorate3(decorators, target, key, desc) {
1465
1683
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1466
1684
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -1547,31 +1765,6 @@ var CallManager = class extends Resource5 {
1547
1765
  turnScreenshareOff() {
1548
1766
  return this._mediaManager.turnScreenshareOff();
1549
1767
  }
1550
- // TODO(burdon): Can this be mocked?
1551
- constructor(_client) {
1552
- super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
1553
- call: {},
1554
- media: {
1555
- pulledAudioTracks: {},
1556
- pulledVideoStreams: {}
1557
- }
1558
- }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1559
- this._client.config.getOrThrow("runtime.services.edge.url");
1560
- const networkService = this._client.services.services.NetworkService;
1561
- invariant3(networkService, "network service not found", {
1562
- F: __dxlog_file5,
1563
- L: 159,
1564
- S: this,
1565
- A: [
1566
- "networkService",
1567
- "'network service not found'"
1568
- ]
1569
- });
1570
- this._swarmSynchronizer = new CallSwarmSynchronizer({
1571
- networkService
1572
- });
1573
- this._mediaManager = new MediaManager();
1574
- }
1575
1768
  async _open() {
1576
1769
  await this._mediaManager.open();
1577
1770
  await this._swarmSynchronizer.open();
@@ -1645,6 +1838,37 @@ var CallManager = class extends Resource5 {
1645
1838
  this._state.call = this._swarmSynchronizer._getState();
1646
1839
  this._state.media = this._mediaManager._getState();
1647
1840
  }
1841
+ // TODO(burdon): Can this be mocked?
1842
+ constructor(_client) {
1843
+ super(), _define_property6(this, "_client", void 0), _define_property6(this, "callStateUpdated", void 0), // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
1844
+ _define_property6(this, "mediaStateUpdated", void 0), _define_property6(this, "left", void 0), /**
1845
+ * Live object state. Is changed on internal events.
1846
+ * CAUTION: Do not change directly.
1847
+ */
1848
+ _define_property6(this, "_state", void 0), // TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
1849
+ _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({
1850
+ call: {},
1851
+ media: {
1852
+ pulledAudioTracks: {},
1853
+ pulledVideoStreams: {}
1854
+ }
1855
+ }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1856
+ this._client.config.getOrThrow("runtime.services.edge.url");
1857
+ const networkService = this._client.services.services.NetworkService;
1858
+ invariant4(networkService, "network service not found", {
1859
+ F: __dxlog_file5,
1860
+ L: 159,
1861
+ S: this,
1862
+ A: [
1863
+ "networkService",
1864
+ "'network service not found'"
1865
+ ]
1866
+ });
1867
+ this._swarmSynchronizer = new CallSwarmSynchronizer({
1868
+ networkService
1869
+ });
1870
+ this._mediaManager = new MediaManager();
1871
+ }
1648
1872
  };
1649
1873
  _ts_decorate3([
1650
1874
  synchronized3
@@ -1667,4 +1891,4 @@ export {
1667
1891
  MediaManager,
1668
1892
  CallManager
1669
1893
  };
1670
- //# sourceMappingURL=chunk-IHDNQLLR.mjs.map
1894
+ //# sourceMappingURL=chunk-JR7KESLL.mjs.map