@dxos/plugin-thread 0.8.3 → 0.8.4-main.03d5cd7b56

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 (598) hide show
  1. package/dist/lib/neutral/CallDebugPanel-CXWTCS7A.mjs +172 -0
  2. package/dist/lib/neutral/CallDebugPanel-CXWTCS7A.mjs.map +7 -0
  3. package/dist/lib/neutral/CallSidebar-YVXU6BOQ.mjs +25 -0
  4. package/dist/lib/neutral/CallSidebar-YVXU6BOQ.mjs.map +7 -0
  5. package/dist/lib/neutral/ChannelChat-EKQYQQXZ.mjs +10 -0
  6. package/dist/lib/neutral/ChannelContainer-XXMX5X43.mjs +9 -0
  7. package/dist/lib/neutral/ThreadCompanion-YGA2ORTJ.mjs +208 -0
  8. package/dist/lib/neutral/ThreadCompanion-YGA2ORTJ.mjs.map +7 -0
  9. package/dist/lib/neutral/ThreadContainer-XYEPEOSD.mjs +61 -0
  10. package/dist/lib/neutral/ThreadContainer-XYEPEOSD.mjs.map +7 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs +89 -0
  12. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs +40 -0
  14. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  15. package/dist/lib/neutral/ThreadSettings-5Z5XIHG3.mjs +15 -0
  16. package/dist/lib/neutral/ThreadSettings-5Z5XIHG3.mjs.map +7 -0
  17. package/dist/lib/neutral/add-message-WX3LCGZC.mjs +87 -0
  18. package/dist/lib/neutral/add-message-WX3LCGZC.mjs.map +7 -0
  19. package/dist/lib/neutral/app-graph-builder-BBHAUCMZ.mjs +173 -0
  20. package/dist/lib/neutral/app-graph-builder-BBHAUCMZ.mjs.map +7 -0
  21. package/dist/lib/neutral/append-channel-message-J7N6UEBL.mjs +40 -0
  22. package/dist/lib/neutral/append-channel-message-J7N6UEBL.mjs.map +7 -0
  23. package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs +15 -0
  24. package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs.map +7 -0
  25. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  26. package/dist/lib/neutral/call-manager-JFA4DLWR.mjs +24 -0
  27. package/dist/lib/neutral/call-manager-JFA4DLWR.mjs.map +7 -0
  28. package/dist/lib/neutral/capabilities/index.mjs +29 -0
  29. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-44D7D4ZX.mjs +20 -0
  31. package/dist/lib/neutral/chunk-44D7D4ZX.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-4SVMVL4L.mjs +164 -0
  33. package/dist/lib/neutral/chunk-4SVMVL4L.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-5T5LPLBN.mjs +36 -0
  35. package/dist/lib/neutral/chunk-5T5LPLBN.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-BFHJWC3L.mjs +276 -0
  37. package/dist/lib/neutral/chunk-BFHJWC3L.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-CROE4U4O.mjs +100 -0
  39. package/dist/lib/neutral/chunk-CROE4U4O.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-EACFR36K.mjs +55 -0
  41. package/dist/lib/neutral/chunk-EACFR36K.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-FWSMZWBO.mjs +178 -0
  43. package/dist/lib/neutral/chunk-FWSMZWBO.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  45. package/dist/lib/{node-esm/chunk-PGRP3O4O.mjs → neutral/chunk-JLY4NVTA.mjs} +14 -9
  46. package/dist/lib/neutral/chunk-JLY4NVTA.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-NGZVEPJV.mjs +8 -0
  48. package/dist/lib/neutral/chunk-NGZVEPJV.mjs.map +7 -0
  49. package/dist/lib/{node-esm/chunk-WXNPD542.mjs → neutral/chunk-PZ7WTAA2.mjs} +317 -505
  50. package/dist/lib/neutral/chunk-PZ7WTAA2.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-UQFTL6TV.mjs +202 -0
  52. package/dist/lib/neutral/chunk-UQFTL6TV.mjs.map +7 -0
  53. package/dist/lib/neutral/components/index.mjs +1230 -0
  54. package/dist/lib/neutral/components/index.mjs.map +7 -0
  55. package/dist/lib/neutral/containers/index.mjs +19 -0
  56. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  57. package/dist/lib/neutral/create-DGJZRLG7.mjs +52 -0
  58. package/dist/lib/neutral/create-DGJZRLG7.mjs.map +7 -0
  59. package/dist/lib/neutral/create-channel-RP646IAE.mjs +19 -0
  60. package/dist/lib/neutral/create-channel-RP646IAE.mjs.map +7 -0
  61. package/dist/lib/neutral/create-object-HIEWSBZB.mjs +27 -0
  62. package/dist/lib/neutral/create-object-HIEWSBZB.mjs.map +7 -0
  63. package/dist/lib/neutral/create-proposals-CPLU4YC6.mjs +56 -0
  64. package/dist/lib/neutral/create-proposals-CPLU4YC6.mjs.map +7 -0
  65. package/dist/lib/neutral/delete-MKKME2FE.mjs +57 -0
  66. package/dist/lib/neutral/delete-MKKME2FE.mjs.map +7 -0
  67. package/dist/lib/neutral/delete-message-UBZH3SZA.mjs +54 -0
  68. package/dist/lib/neutral/delete-message-UBZH3SZA.mjs.map +7 -0
  69. package/dist/lib/neutral/hooks/index.mjs +19 -0
  70. package/dist/lib/neutral/index.mjs +68 -0
  71. package/dist/lib/neutral/markdown-XQLZYS2O.mjs +83 -0
  72. package/dist/lib/neutral/markdown-XQLZYS2O.mjs.map +7 -0
  73. package/dist/lib/neutral/meta.json +1 -0
  74. package/dist/lib/neutral/meta.mjs +10 -0
  75. package/dist/lib/neutral/meta.mjs.map +7 -0
  76. package/dist/lib/neutral/on-create-space-MRLZYOJR.mjs +23 -0
  77. package/dist/lib/neutral/on-create-space-MRLZYOJR.mjs.map +7 -0
  78. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  79. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  80. package/dist/lib/neutral/operations/index.mjs +8 -0
  81. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  82. package/dist/lib/neutral/plugin.mjs +16 -0
  83. package/dist/lib/neutral/plugin.mjs.map +7 -0
  84. package/dist/lib/neutral/react-root-VMMNUSSL.mjs +18 -0
  85. package/dist/lib/neutral/react-root-VMMNUSSL.mjs.map +7 -0
  86. package/dist/lib/neutral/react-surface-WPSVOTVG.mjs +94 -0
  87. package/dist/lib/neutral/react-surface-WPSVOTVG.mjs.map +7 -0
  88. package/dist/lib/neutral/restore-SUXNC6GE.mjs +32 -0
  89. package/dist/lib/neutral/restore-SUXNC6GE.mjs.map +7 -0
  90. package/dist/lib/neutral/restore-message-2TPJB32Y.mjs +33 -0
  91. package/dist/lib/neutral/restore-message-2TPJB32Y.mjs.map +7 -0
  92. package/dist/lib/neutral/select-H5RMZH43.mjs +24 -0
  93. package/dist/lib/neutral/select-H5RMZH43.mjs.map +7 -0
  94. package/dist/lib/neutral/settings-HK4EB6TF.mjs +30 -0
  95. package/dist/lib/neutral/settings-HK4EB6TF.mjs.map +7 -0
  96. package/dist/lib/neutral/state-UU7VEAKV.mjs +22 -0
  97. package/dist/lib/neutral/state-UU7VEAKV.mjs.map +7 -0
  98. package/dist/lib/neutral/testing/index.mjs +58 -0
  99. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  100. package/dist/lib/neutral/toggle-resolved-HKZ4IRHG.mjs +36 -0
  101. package/dist/lib/neutral/toggle-resolved-HKZ4IRHG.mjs.map +7 -0
  102. package/dist/lib/neutral/translations.mjs +90 -0
  103. package/dist/lib/neutral/translations.mjs.map +7 -0
  104. package/dist/lib/neutral/types/index.mjs +12 -0
  105. package/dist/lib/neutral/types/index.mjs.map +7 -0
  106. package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs +54 -0
  107. package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs.map +7 -0
  108. package/dist/types/src/ThreadPlugin.d.ts +3 -1
  109. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  110. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  111. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  112. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  113. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  114. package/dist/types/src/blueprints/index.d.ts +2 -0
  115. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  116. package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
  117. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  118. package/dist/types/src/calls/call-manager.d.ts +40 -30
  119. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  120. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  121. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  122. package/dist/types/src/calls/media-manager.d.ts +2 -2
  123. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  124. package/dist/types/src/calls/speaking-monitor.d.ts +0 -3
  125. package/dist/types/src/calls/speaking-monitor.d.ts.map +1 -1
  126. package/dist/types/src/calls/types.d.ts +1 -1
  127. package/dist/types/src/calls/types.d.ts.map +1 -1
  128. package/dist/types/src/calls/util/audio.d.ts.map +1 -1
  129. package/dist/types/src/calls/util/calls-service.d.ts +11 -6
  130. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  131. package/dist/types/src/calls/util/history-cache.d.ts.map +1 -1
  132. package/dist/types/src/calls/util/media.d.ts.map +1 -1
  133. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  134. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  135. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  136. package/dist/types/src/calls-service.stories.d.ts +23 -0
  137. package/dist/types/src/calls-service.stories.d.ts.map +1 -0
  138. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  139. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  140. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  141. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  142. package/dist/types/src/capabilities/call-manager.d.ts +3 -2
  143. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  144. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  145. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  146. package/dist/types/src/capabilities/index.d.ts +19 -13
  147. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  148. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  149. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  150. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  151. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  152. package/dist/types/src/capabilities/react-root.d.ts +4 -2
  153. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  154. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  155. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  156. package/dist/types/src/capabilities/settings.d.ts +5 -2
  157. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  158. package/dist/types/src/capabilities/state.d.ts +5 -5
  159. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  160. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  161. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  162. package/dist/types/src/components/Call/Call.d.ts +32 -4
  163. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  164. package/dist/types/src/components/Call/Toolbar.d.ts +6 -6
  165. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  166. package/dist/types/src/components/Chat/Chat.d.ts +51 -0
  167. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  168. package/dist/types/src/components/Chat/index.d.ts +2 -0
  169. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  170. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +13 -0
  171. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -0
  172. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +160 -0
  173. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -0
  174. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts +14 -0
  175. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -0
  176. package/dist/types/src/components/CommentsPanel/index.d.ts +3 -0
  177. package/dist/types/src/components/CommentsPanel/index.d.ts.map +1 -0
  178. package/dist/types/src/components/Lobby/Lobby.d.ts +24 -3
  179. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  180. package/dist/types/src/components/Media/VideoObject.d.ts +3 -3
  181. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  182. package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
  183. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  184. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +15 -0
  185. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
  186. package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
  187. package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
  188. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  189. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  190. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -1
  191. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +160 -5
  192. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  193. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  194. package/dist/types/src/components/ResponsiveGrid/{ResponsiveContainer.d.ts → ResponsivePanel.d.ts} +4 -4
  195. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -0
  196. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +164 -0
  197. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -0
  198. package/dist/types/src/components/ResponsiveGrid/index.d.ts +1 -1
  199. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -1
  200. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +6 -0
  201. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  202. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +161 -0
  203. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -0
  204. package/dist/types/src/components/ThreadSettings/index.d.ts +2 -0
  205. package/dist/types/src/components/ThreadSettings/index.d.ts.map +1 -0
  206. package/dist/types/src/components/index.d.ts +5 -9
  207. package/dist/types/src/components/index.d.ts.map +1 -1
  208. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +15 -0
  209. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
  210. package/dist/types/src/containers/CallDebugPanel/index.d.ts +2 -0
  211. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
  212. package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
  213. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
  214. package/dist/types/src/containers/CallSidebar/index.d.ts +2 -0
  215. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
  216. package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts +20 -0
  217. package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts.map +1 -0
  218. package/dist/types/src/containers/ChannelChat/index.d.ts +4 -0
  219. package/dist/types/src/containers/ChannelChat/index.d.ts.map +1 -0
  220. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +12 -0
  221. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
  222. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +162 -0
  223. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
  224. package/dist/types/src/containers/ChannelContainer/index.d.ts +2 -0
  225. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
  226. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +8 -0
  227. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
  228. package/dist/types/src/containers/ThreadCompanion/index.d.ts +2 -0
  229. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
  230. package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts +20 -0
  231. package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts.map +1 -0
  232. package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts +162 -0
  233. package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts.map +1 -0
  234. package/dist/types/src/containers/ThreadContainer/index.d.ts +4 -0
  235. package/dist/types/src/containers/ThreadContainer/index.d.ts.map +1 -0
  236. package/dist/types/src/containers/index.d.ts +8 -0
  237. package/dist/types/src/containers/index.d.ts.map +1 -0
  238. package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
  239. package/dist/types/src/extensions/command.d.ts.map +1 -0
  240. package/dist/types/src/extensions/index.d.ts +1 -0
  241. package/dist/types/src/extensions/index.d.ts.map +1 -1
  242. package/dist/types/src/extensions/threads.d.ts +9 -4
  243. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  244. package/dist/types/src/hooks/analytics.d.ts +2 -3
  245. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  246. package/dist/types/src/hooks/index.d.ts +3 -0
  247. package/dist/types/src/hooks/index.d.ts.map +1 -1
  248. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  249. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  250. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
  251. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
  252. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  253. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
  254. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
  255. package/dist/types/src/index.d.ts +2 -2
  256. package/dist/types/src/index.d.ts.map +1 -1
  257. package/dist/types/src/meta.d.ts +3 -4
  258. package/dist/types/src/meta.d.ts.map +1 -1
  259. package/dist/types/src/operations/add-message.d.ts +5 -0
  260. package/dist/types/src/operations/add-message.d.ts.map +1 -0
  261. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  262. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  263. package/dist/types/src/operations/create-channel.d.ts +5 -0
  264. package/dist/types/src/operations/create-channel.d.ts.map +1 -0
  265. package/dist/types/src/operations/create-proposals.d.ts +5 -0
  266. package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
  267. package/dist/types/src/operations/create.d.ts +5 -0
  268. package/dist/types/src/operations/create.d.ts.map +1 -0
  269. package/dist/types/src/operations/delete-message.d.ts +5 -0
  270. package/dist/types/src/operations/delete-message.d.ts.map +1 -0
  271. package/dist/types/src/operations/delete.d.ts +5 -0
  272. package/dist/types/src/operations/delete.d.ts.map +1 -0
  273. package/dist/types/src/operations/index.d.ts +3 -0
  274. package/dist/types/src/operations/index.d.ts.map +1 -0
  275. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  276. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  277. package/dist/types/src/operations/restore-message.d.ts +5 -0
  278. package/dist/types/src/operations/restore-message.d.ts.map +1 -0
  279. package/dist/types/src/operations/restore.d.ts +5 -0
  280. package/dist/types/src/operations/restore.d.ts.map +1 -0
  281. package/dist/types/src/operations/select.d.ts +5 -0
  282. package/dist/types/src/operations/select.d.ts.map +1 -0
  283. package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
  284. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
  285. package/dist/types/src/plugin.d.ts +4 -0
  286. package/dist/types/src/plugin.d.ts.map +1 -0
  287. package/dist/types/src/testing/data.d.ts +5 -0
  288. package/dist/types/src/testing/data.d.ts.map +1 -0
  289. package/dist/types/src/testing/index.d.ts +1 -1
  290. package/dist/types/src/testing/index.d.ts.map +1 -1
  291. package/dist/types/src/translations.d.ts +144 -194
  292. package/dist/types/src/translations.d.ts.map +1 -1
  293. package/dist/types/src/types/Settings.d.ts +5 -0
  294. package/dist/types/src/types/Settings.d.ts.map +1 -0
  295. package/dist/types/src/types/ThreadCapabilities.d.ts +26 -0
  296. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  297. package/dist/types/src/types/ThreadOperation.d.ts +1995 -0
  298. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  299. package/dist/types/src/types/index.d.ts +3 -1
  300. package/dist/types/src/types/index.d.ts.map +1 -1
  301. package/dist/types/src/types/types.d.ts +3 -325
  302. package/dist/types/src/types/types.d.ts.map +1 -1
  303. package/dist/types/src/util.d.ts +21 -3
  304. package/dist/types/src/util.d.ts.map +1 -1
  305. package/dist/types/tsconfig.tsbuildinfo +1 -1
  306. package/package.json +150 -80
  307. package/src/ThreadPlugin.node.ts +39 -0
  308. package/src/ThreadPlugin.test.ts +37 -0
  309. package/src/ThreadPlugin.tsx +64 -147
  310. package/src/blueprints/index.ts +5 -0
  311. package/src/blueprints/thread-blueprint.ts +36 -0
  312. package/src/calls/call-manager.ts +78 -50
  313. package/src/calls/call-swarm-synchronizer.ts +3 -3
  314. package/src/calls/media-manager.ts +77 -41
  315. package/src/calls/types.ts +8 -4
  316. package/src/calls/util/calls-service.ts +74 -19
  317. package/src/calls/util/stub-media-streams.ts +65 -9
  318. package/src/calls/util/task-scheduling.ts +4 -4
  319. package/src/calls-service.stories.tsx +230 -0
  320. package/src/capabilities/app-graph-builder.ts +176 -161
  321. package/src/capabilities/blueprint-definition.ts +19 -0
  322. package/src/capabilities/call-manager.ts +18 -10
  323. package/src/capabilities/create-object.ts +29 -0
  324. package/src/capabilities/index.ts +17 -11
  325. package/src/capabilities/markdown.ts +54 -36
  326. package/src/capabilities/operation-handler.ts +16 -0
  327. package/src/capabilities/react-root.tsx +12 -9
  328. package/src/capabilities/react-surface.tsx +83 -74
  329. package/src/capabilities/settings.ts +26 -12
  330. package/src/capabilities/state.ts +14 -17
  331. package/src/capabilities/undo-mappings.ts +46 -0
  332. package/src/components/Call/Call.tsx +17 -12
  333. package/src/components/Call/Toolbar.tsx +63 -46
  334. package/src/components/Chat/Chat.tsx +258 -0
  335. package/src/components/Chat/index.ts +5 -0
  336. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +95 -0
  337. package/src/components/CommentsPanel/CommentsPanel.tsx +71 -0
  338. package/src/components/CommentsPanel/CommentsThread.tsx +171 -0
  339. package/src/components/CommentsPanel/index.ts +6 -0
  340. package/src/components/Lobby/Lobby.tsx +21 -17
  341. package/src/components/Media/AudioStream.tsx +2 -2
  342. package/src/components/Media/VideoObject.stories.tsx +37 -30
  343. package/src/components/Media/VideoObject.tsx +1 -1
  344. package/src/components/MessagePanel/MessagePanel.tsx +221 -0
  345. package/src/components/MessagePanel/index.ts +5 -0
  346. package/src/components/Participant/Participant.tsx +35 -15
  347. package/src/components/Participant/ParticipantGrid.tsx +1 -1
  348. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +51 -49
  349. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
  350. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +15 -12
  351. package/src/components/ResponsiveGrid/{ResponsiveContainer.stories.tsx → ResponsivePanel.stories.tsx} +12 -12
  352. package/src/components/ResponsiveGrid/{ResponsiveContainer.tsx → ResponsivePanel.tsx} +7 -9
  353. package/src/components/ResponsiveGrid/index.ts +1 -1
  354. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +32 -0
  355. package/src/components/ThreadSettings/ThreadSettings.tsx +20 -0
  356. package/src/components/ThreadSettings/index.ts +5 -0
  357. package/src/components/index.ts +6 -12
  358. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +173 -0
  359. package/src/containers/CallDebugPanel/index.ts +5 -0
  360. package/src/containers/CallSidebar/CallSidebar.tsx +18 -0
  361. package/src/containers/CallSidebar/index.ts +5 -0
  362. package/src/containers/ChannelChat/ChannelChat.tsx +75 -0
  363. package/src/containers/ChannelChat/index.ts +8 -0
  364. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +105 -0
  365. package/src/containers/ChannelContainer/ChannelContainer.tsx +223 -0
  366. package/src/containers/ChannelContainer/index.ts +5 -0
  367. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +215 -0
  368. package/src/containers/ThreadCompanion/index.ts +5 -0
  369. package/src/containers/ThreadContainer/ThreadContainer.stories.tsx +86 -0
  370. package/src/containers/ThreadContainer/ThreadContainer.tsx +75 -0
  371. package/src/containers/ThreadContainer/index.ts +8 -0
  372. package/src/containers/index.ts +12 -0
  373. package/src/{components/command-extension.ts → extensions/command.ts} +7 -4
  374. package/src/extensions/index.ts +1 -0
  375. package/src/extensions/threads.ts +89 -44
  376. package/src/hooks/analytics.ts +22 -21
  377. package/src/hooks/index.ts +4 -0
  378. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  379. package/src/hooks/useDebugMode.ts +1 -1
  380. package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
  381. package/src/hooks/useVideoStreamTrack.tsx +36 -0
  382. package/src/index.ts +4 -3
  383. package/src/meta.ts +11 -7
  384. package/src/operations/add-message.ts +81 -0
  385. package/src/operations/append-channel-message.ts +37 -0
  386. package/src/operations/create-channel.ts +20 -0
  387. package/src/operations/create-proposals.ts +49 -0
  388. package/src/operations/create.ts +48 -0
  389. package/src/operations/delete-message.ts +53 -0
  390. package/src/operations/delete.ts +63 -0
  391. package/src/operations/index.ts +20 -0
  392. package/src/operations/on-create-space.ts +27 -0
  393. package/src/operations/restore-message.ts +38 -0
  394. package/src/operations/restore.ts +38 -0
  395. package/src/operations/select.ts +24 -0
  396. package/src/operations/toggle-resolved.ts +41 -0
  397. package/src/plugin.ts +11 -0
  398. package/src/testing/data.ts +49 -0
  399. package/src/testing/index.ts +1 -1
  400. package/src/translations.ts +77 -73
  401. package/src/types/Settings.ts +10 -0
  402. package/src/types/ThreadCapabilities.ts +41 -0
  403. package/src/types/ThreadOperation.ts +179 -0
  404. package/src/types/index.ts +4 -1
  405. package/src/types/types.ts +4 -92
  406. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  407. package/src/typings.d.ts +8 -0
  408. package/src/util.ts +38 -6
  409. package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
  410. package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
  411. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs +0 -171
  412. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +0 -7
  413. package/dist/lib/browser/call-manager-APQAZWHT.mjs +0 -23
  414. package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +0 -7
  415. package/dist/lib/browser/chunk-4H4A264L.mjs +0 -1708
  416. package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
  417. package/dist/lib/browser/chunk-5P5BH5GE.mjs +0 -88
  418. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
  419. package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
  420. package/dist/lib/browser/chunk-6NBVNXTM.mjs.map +0 -7
  421. package/dist/lib/browser/chunk-AEXWNS6Z.mjs +0 -128
  422. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +0 -7
  423. package/dist/lib/browser/chunk-IIUTBDVB.mjs +0 -17
  424. package/dist/lib/browser/chunk-IIUTBDVB.mjs.map +0 -7
  425. package/dist/lib/browser/chunk-JKQUJOTX.mjs +0 -31
  426. package/dist/lib/browser/chunk-JKQUJOTX.mjs.map +0 -7
  427. package/dist/lib/browser/chunk-PG5CTFKK.mjs +0 -550
  428. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
  429. package/dist/lib/browser/chunk-R5MDLUPC.mjs +0 -18
  430. package/dist/lib/browser/chunk-R5MDLUPC.mjs.map +0 -7
  431. package/dist/lib/browser/chunk-TAFSCSUR.mjs +0 -351
  432. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
  433. package/dist/lib/browser/chunk-XZKBN3NS.mjs +0 -983
  434. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
  435. package/dist/lib/browser/index.mjs +0 -308
  436. package/dist/lib/browser/index.mjs.map +0 -7
  437. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs +0 -353
  438. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +0 -7
  439. package/dist/lib/browser/markdown-TE5SWWNJ.mjs +0 -169
  440. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +0 -7
  441. package/dist/lib/browser/meta.json +0 -1
  442. package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
  443. package/dist/lib/browser/react-root-NK3A4VG7.mjs.map +0 -7
  444. package/dist/lib/browser/react-surface-VXUJKSOG.mjs +0 -108
  445. package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +0 -7
  446. package/dist/lib/browser/settings-RB2RSLXV.mjs +0 -22
  447. package/dist/lib/browser/settings-RB2RSLXV.mjs.map +0 -7
  448. package/dist/lib/browser/state-RKL5MSDP.mjs +0 -34
  449. package/dist/lib/browser/state-RKL5MSDP.mjs.map +0 -7
  450. package/dist/lib/browser/types/index.mjs +0 -16
  451. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
  452. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
  453. package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
  454. package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
  455. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
  456. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
  457. package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
  458. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
  459. package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
  460. package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
  461. package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
  462. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
  463. package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
  464. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
  465. package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
  466. package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
  467. package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
  468. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
  469. package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
  470. package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
  471. package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
  472. package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
  473. package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
  474. package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
  475. package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
  476. package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
  477. package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
  478. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
  479. package/dist/lib/node/index.cjs +0 -310
  480. package/dist/lib/node/index.cjs.map +0 -7
  481. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
  482. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
  483. package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
  484. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
  485. package/dist/lib/node/meta.json +0 -1
  486. package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
  487. package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
  488. package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
  489. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
  490. package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
  491. package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
  492. package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
  493. package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
  494. package/dist/lib/node/types/index.cjs +0 -38
  495. package/dist/lib/node/types/index.cjs.map +0 -7
  496. package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
  497. package/dist/lib/node-esm/ChatContainer-F6CSADV7.mjs +0 -15
  498. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs +0 -172
  499. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +0 -7
  500. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs +0 -24
  501. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +0 -7
  502. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs +0 -984
  503. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
  504. package/dist/lib/node-esm/chunk-ESQC6SYE.mjs +0 -19
  505. package/dist/lib/node-esm/chunk-ESQC6SYE.mjs.map +0 -7
  506. package/dist/lib/node-esm/chunk-K4KAUOKT.mjs +0 -19
  507. package/dist/lib/node-esm/chunk-K4KAUOKT.mjs.map +0 -7
  508. package/dist/lib/node-esm/chunk-O3V45YJP.mjs +0 -90
  509. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
  510. package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
  511. package/dist/lib/node-esm/chunk-O63QJPQX.mjs.map +0 -7
  512. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs +0 -352
  513. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
  514. package/dist/lib/node-esm/chunk-PGRP3O4O.mjs.map +0 -7
  515. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs +0 -129
  516. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +0 -7
  517. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs +0 -551
  518. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
  519. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
  520. package/dist/lib/node-esm/index.mjs +0 -309
  521. package/dist/lib/node-esm/index.mjs.map +0 -7
  522. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs +0 -354
  523. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +0 -7
  524. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs +0 -170
  525. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +0 -7
  526. package/dist/lib/node-esm/meta.json +0 -1
  527. package/dist/lib/node-esm/react-root-RUXOAQNW.mjs +0 -28
  528. package/dist/lib/node-esm/react-root-RUXOAQNW.mjs.map +0 -7
  529. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs +0 -109
  530. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +0 -7
  531. package/dist/lib/node-esm/settings-EA7DFSM6.mjs +0 -23
  532. package/dist/lib/node-esm/settings-EA7DFSM6.mjs.map +0 -7
  533. package/dist/lib/node-esm/state-6AUTNROZ.mjs +0 -35
  534. package/dist/lib/node-esm/state-6AUTNROZ.mjs.map +0 -7
  535. package/dist/lib/node-esm/types/index.mjs +0 -17
  536. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  537. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  538. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  539. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  540. package/dist/types/src/components/CallDebugPanel.d.ts +0 -8
  541. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  542. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  543. package/dist/types/src/components/ChannelContainer.d.ts +0 -14
  544. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  545. package/dist/types/src/components/ChannelContainer.stories.d.ts +0 -10
  546. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  547. package/dist/types/src/components/Chat.stories.d.ts +0 -6
  548. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  549. package/dist/types/src/components/ChatContainer.d.ts +0 -17
  550. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  551. package/dist/types/src/components/CommentContainer.d.ts +0 -13
  552. package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
  553. package/dist/types/src/components/Comments.stories.d.ts +0 -6
  554. package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
  555. package/dist/types/src/components/CommentsContainer.d.ts +0 -13
  556. package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
  557. package/dist/types/src/components/MessageContainer.d.ts +0 -11
  558. package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
  559. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
  560. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +0 -10
  561. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +0 -1
  562. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  563. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  564. package/dist/types/src/components/ThreadSettings.d.ts +0 -6
  565. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  566. package/dist/types/src/components/command-extension.d.ts.map +0 -1
  567. package/dist/types/src/components/testing.d.ts +0 -4
  568. package/dist/types/src/components/testing.d.ts.map +0 -1
  569. package/dist/types/src/peers.stories.d.ts +0 -11
  570. package/dist/types/src/peers.stories.d.ts.map +0 -1
  571. package/dist/types/src/testing/stories.d.ts +0 -2
  572. package/dist/types/src/testing/stories.d.ts.map +0 -1
  573. package/dist/types/src/types/schema.d.ts +0 -133
  574. package/dist/types/src/types/schema.d.ts.map +0 -1
  575. package/src/capabilities/capabilities.ts +0 -33
  576. package/src/capabilities/intent-resolver.ts +0 -296
  577. package/src/components/CallDebugPanel.tsx +0 -115
  578. package/src/components/CallSidebar.tsx +0 -17
  579. package/src/components/ChannelContainer.stories.tsx +0 -58
  580. package/src/components/ChannelContainer.tsx +0 -199
  581. package/src/components/Chat.stories.tsx +0 -88
  582. package/src/components/ChatContainer.tsx +0 -140
  583. package/src/components/CommentContainer.tsx +0 -198
  584. package/src/components/Comments.stories.tsx +0 -85
  585. package/src/components/CommentsContainer.tsx +0 -66
  586. package/src/components/MessageContainer.tsx +0 -167
  587. package/src/components/ThreadComplementary.tsx +0 -151
  588. package/src/components/ThreadSettings.tsx +0 -17
  589. package/src/components/testing.ts +0 -29
  590. package/src/peers.stories.tsx +0 -189
  591. package/src/testing/stories.ts +0 -50
  592. package/src/types/schema.ts +0 -33
  593. /package/dist/lib/{browser/ChannelContainer-PKFBVENP.mjs.map → neutral/ChannelChat-EKQYQQXZ.mjs.map} +0 -0
  594. /package/dist/lib/{browser/ChatContainer-RSOKYAMK.mjs.map → neutral/ChannelContainer-XXMX5X43.mjs.map} +0 -0
  595. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  596. /package/dist/lib/{node-esm/ChannelContainer-O4QJII2P.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  597. /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
  598. /package/dist/lib/{node-esm/ChatContainer-F6CSADV7.mjs.map → neutral/index.mjs.map} +0 -0
@@ -1,8 +1,13 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
1
+ import {
2
+ createBlackCanvasStreamTrack,
3
+ createInaudibleAudioStreamTrack
4
+ } from "./chunk-CROE4U4O.mjs";
2
5
 
3
- // packages/plugins/plugin-thread/src/calls/types.ts
6
+ // src/calls/types.ts
7
+ import { invariant } from "@dxos/invariant";
4
8
  import { buf } from "@dxos/protocols/buf";
5
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";
6
11
  var CALLS_URL = "https://calls-service.dxos.workers.dev";
7
12
  var codec = {
8
13
  encode: (message) => {
@@ -14,52 +19,57 @@ var codec = {
14
19
  };
15
20
  var TrackNameCodec = {
16
21
  encode: (trackData) => {
17
- return trackData.sessionId + "/" + trackData.trackName;
22
+ invariant(trackData.sessionId, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 20, S: void 0, A: ["trackData.sessionId", ""] });
23
+ invariant(trackData.trackName, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 21, S: void 0, A: ["trackData.trackName", ""] });
24
+ invariant(trackData.mid, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 22, S: void 0, A: ["trackData.mid", ""] });
25
+ return trackData.sessionId + "/" + trackData.trackName + "/" + trackData.mid;
18
26
  },
19
27
  decode: (name) => {
20
- const [sessionId, trackName] = name.split("/");
28
+ const [sessionId, trackName, mid] = name.split("/");
21
29
  return {
22
30
  sessionId,
23
31
  trackName,
24
- location: "remote"
32
+ location: "remote",
33
+ mid
25
34
  };
26
35
  }
27
36
  };
28
37
 
29
- // packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts
38
+ // src/calls/call-swarm-synchronizer.ts
30
39
  import md5Hex from "md5-hex";
31
40
  import { DeferredTask, Event, scheduleTaskInterval, synchronized } from "@dxos/async";
32
41
  import { Context, Resource } from "@dxos/context";
33
42
  import { generateName } from "@dxos/display-name";
34
- import { invariant } from "@dxos/invariant";
43
+ import { invariant as invariant2 } from "@dxos/invariant";
35
44
  import { PublicKey } from "@dxos/keys";
36
45
  import { log } from "@dxos/log";
37
46
  import { buf as buf2 } from "@dxos/protocols/buf";
38
47
  import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
39
48
  import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
40
49
  import { isNonNullable } from "@dxos/util";
50
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
41
51
  function _ts_decorate(decorators, target, key, desc) {
42
52
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
43
53
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
44
54
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
45
55
  return c > 3 && r && Object.defineProperty(target, key, r), r;
46
56
  }
47
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
48
57
  var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
49
58
  var CallSwarmSynchronizer = class extends Resource {
59
+ stateUpdated = new Event();
60
+ _state = {
61
+ activities: {}
62
+ };
63
+ _networkService;
64
+ _lastSwarmEvent = void 0;
65
+ _reconcileSwarmStateTask = void 0;
66
+ _identityKey = void 0;
67
+ _deviceKey = void 0;
68
+ _displayName = void 0;
69
+ _swarmCtx = void 0;
70
+ _sendStateTask = void 0;
50
71
  constructor({ networkService }) {
51
72
  super();
52
- this.stateUpdated = new Event();
53
- this._state = {
54
- activities: {}
55
- };
56
- this._lastSwarmEvent = void 0;
57
- this._reconcileSwarmStateTask = void 0;
58
- this._identityKey = void 0;
59
- this._deviceKey = void 0;
60
- this._displayName = void 0;
61
- this._swarmCtx = void 0;
62
- this._sendStateTask = void 0;
63
73
  this._networkService = networkService;
64
74
  }
65
75
  /**
@@ -126,12 +136,7 @@ var CallSwarmSynchronizer = class extends Resource {
126
136
  if (this._swarmCtx) {
127
137
  log.verbose("joined to a different room", {
128
138
  roomId
129
- }, {
130
- F: __dxlog_file,
131
- L: 152,
132
- S: this,
133
- C: (f, a) => f(...a)
134
- });
139
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 102, S: this });
135
140
  return;
136
141
  }
137
142
  this._state.roomId = roomId;
@@ -149,28 +154,9 @@ var CallSwarmSynchronizer = class extends Resource {
149
154
  this._reconcileSwarmStateTask = void 0;
150
155
  }
151
156
  async join() {
152
- invariant(this._state.roomId, void 0, {
153
- F: __dxlog_file,
154
- L: 176,
155
- S: this,
156
- A: [
157
- "this._state.roomId",
158
- ""
159
- ]
160
- });
161
- invariant(!this._swarmCtx, "Already joined", {
162
- F: __dxlog_file,
163
- L: 177,
164
- S: this,
165
- A: [
166
- "!this._swarmCtx",
167
- "'Already joined'"
168
- ]
169
- });
170
- this._swarmCtx = new Context(void 0, {
171
- F: __dxlog_file,
172
- L: 179
173
- });
157
+ invariant2(this._state.roomId, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 122, S: this, A: ["this._state.roomId", ""] });
158
+ invariant2(!this._swarmCtx, "Already joined", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 123, S: this, A: ["!this._swarmCtx", "'Already joined'"] });
159
+ this._swarmCtx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 124 });
174
160
  const topic = getTopic(this._state.roomId);
175
161
  log("joining swarm", {
176
162
  topic,
@@ -178,12 +164,7 @@ var CallSwarmSynchronizer = class extends Resource {
178
164
  identityKey: this._identityKey,
179
165
  peerKey: this._deviceKey
180
166
  }
181
- }, {
182
- F: __dxlog_file,
183
- L: 181,
184
- S: this,
185
- C: (f, a) => f(...a)
186
- });
167
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 126, S: this });
187
168
  const stream = this._networkService.subscribeSwarmState({
188
169
  topic
189
170
  });
@@ -197,24 +178,14 @@ var CallSwarmSynchronizer = class extends Resource {
197
178
  identityKey: this._identityKey,
198
179
  peerKey: this._deviceKey
199
180
  }
200
- }, {
201
- F: __dxlog_file,
202
- L: 188,
203
- S: this,
204
- C: (f, a) => f(...a)
205
- });
181
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 140, S: this });
206
182
  void this._networkService.leaveSwarm({
207
183
  topic,
208
184
  peer: {
209
185
  identityKey: this._identityKey,
210
186
  peerKey: this._deviceKey
211
187
  }
212
- }).catch((err) => log.catch(err, void 0, {
213
- F: __dxlog_file,
214
- L: 194,
215
- S: this,
216
- C: (f, a) => f(...a)
217
- }));
188
+ }).catch((err) => log.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 153, S: this }));
218
189
  }
219
190
  window.removeEventListener("beforeunload", cleanup);
220
191
  };
@@ -278,15 +249,7 @@ var CallSwarmSynchronizer = class extends Resource {
278
249
  }
279
250
  async _reconcileSwarmState() {
280
251
  const swarmEvent = this._lastSwarmEvent;
281
- invariant(swarmEvent, void 0, {
282
- F: __dxlog_file,
283
- L: 273,
284
- S: this,
285
- A: [
286
- "swarmEvent",
287
- ""
288
- ]
289
- });
252
+ invariant2(swarmEvent, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 216, S: this, A: ["swarmEvent", ""] });
290
253
  const peers = [
291
254
  ...swarmEvent.peers ?? [],
292
255
  ...(swarmEvent.inactivePeers ?? []).filter(({ disconnected, connectionState }) => connectionState === ConnectionState.DISCONNECTED_ABRUPT && disconnected && disconnected > Date.now() - DISCONNECTED_ABRUPT_TIMEOUT)
@@ -298,12 +261,7 @@ var CallSwarmSynchronizer = class extends Resource {
298
261
  log.error("error decoding peer state", {
299
262
  error,
300
263
  peer
301
- }, {
302
- F: __dxlog_file,
303
- L: 290,
304
- S: this,
305
- C: (f, a) => f(...a)
306
- });
264
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 227, S: this });
307
265
  return void 0;
308
266
  }
309
267
  }).filter(isNonNullable);
@@ -311,12 +269,7 @@ var CallSwarmSynchronizer = class extends Resource {
311
269
  this._state.self = users.find((user) => user.id === this._deviceKey);
312
270
  log("reconciling swarm state", {
313
271
  users
314
- }, {
315
- F: __dxlog_file,
316
- L: 297,
317
- S: this,
318
- C: (f, a) => f(...a)
319
- });
272
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 236, S: this });
320
273
  if (users.length === 0) {
321
274
  return;
322
275
  }
@@ -357,7 +310,7 @@ var LamportTimestampCrdt = class {
357
310
  };
358
311
  var getTopic = (roomId) => PublicKey.fromHex(md5Hex(roomId));
359
312
 
360
- // packages/plugins/plugin-thread/src/calls/util/audio.ts
313
+ // src/calls/util/audio.ts
361
314
  var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure }) => {
362
315
  let timeout = -1;
363
316
  let interval = -1;
@@ -399,14 +352,16 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
399
352
  };
400
353
  };
401
354
 
402
- // packages/plugins/plugin-thread/src/calls/util/calls-service.ts
403
- import { PersistentLifecycle } from "@dxos/async";
355
+ // src/calls/util/calls-service.ts
356
+ import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
404
357
  import { Resource as Resource2 } from "@dxos/context";
405
- import { invariant as invariant2 } from "@dxos/invariant";
358
+ import { invariant as invariant3 } from "@dxos/invariant";
406
359
  import { log as log2 } from "@dxos/log";
407
360
 
408
- // packages/plugins/plugin-thread/src/calls/util/history-cache.ts
361
+ // src/calls/util/history-cache.ts
409
362
  var HistoryCache = class {
363
+ _limit;
364
+ _messages;
410
365
  constructor(limit = 100) {
411
366
  this._limit = limit;
412
367
  this._messages = [];
@@ -422,7 +377,7 @@ var HistoryCache = class {
422
377
  }
423
378
  };
424
379
 
425
- // packages/plugins/plugin-thread/src/calls/util/task-scheduling.ts
380
+ // src/calls/util/task-scheduling.ts
426
381
  var DefaultBatchSizeLimit = 64;
427
382
  var FIFOScheduler = class {
428
383
  #schedulerChain;
@@ -479,21 +434,22 @@ var BulkRequestDispatcher = class {
479
434
  }
480
435
  };
481
436
 
482
- // packages/plugins/plugin-thread/src/calls/util/calls-service.ts
483
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
437
+ // src/calls/util/calls-service.ts
438
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
484
439
  var NETWORK_TIMEOUT = 5e3;
485
440
  var CallsServicePeer = class extends Resource2 {
441
+ history = new HistoryCache(100);
442
+ _persistentLifecycle = new PersistentLifecycle({
443
+ start: () => this._startSession(),
444
+ stop: (session) => this._stopSession(session)
445
+ });
446
+ _config;
447
+ taskScheduler = new FIFOScheduler();
448
+ pushTrackDispatcher = new BulkRequestDispatcher(32);
449
+ pullTrackDispatcher = new BulkRequestDispatcher(32);
450
+ closeTrackDispatcher = new BulkRequestDispatcher(32);
486
451
  constructor(config) {
487
452
  super();
488
- this.history = new HistoryCache(100);
489
- this._persistentLifecycle = new PersistentLifecycle({
490
- start: () => this._startSession(),
491
- stop: (session) => this._stopSession(session)
492
- });
493
- this.taskScheduler = new FIFOScheduler();
494
- this.pushTrackDispatcher = new BulkRequestDispatcher(32);
495
- this.pullTrackDispatcher = new BulkRequestDispatcher(32);
496
- this.closeTrackDispatcher = new BulkRequestDispatcher(32);
497
453
  this._config = config;
498
454
  }
499
455
  async _open(ctx) {
@@ -523,14 +479,9 @@ var CallsServicePeer = class extends Resource2 {
523
479
  });
524
480
  peerConnection.addEventListener("connectionstatechange", () => {
525
481
  if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
526
- log2.warn("calls connection failed", {
482
+ log2.info("calls connection failed", {
527
483
  state: peerConnection.connectionState
528
- }, {
529
- F: __dxlog_file2,
530
- L: 115,
531
- S: this,
532
- C: (f, a) => f(...a)
533
- });
484
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 58, S: this });
534
485
  void this._persistentLifecycle.scheduleRestart();
535
486
  }
536
487
  });
@@ -538,36 +489,21 @@ var CallsServicePeer = class extends Resource2 {
538
489
  peerConnection.addEventListener("iceconnectionstatechange", () => {
539
490
  clearTimeout(iceTimeout);
540
491
  if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
541
- log2.warn("calls connection to ICEs failed", {
492
+ log2.info("calls connection to ICEs failed", {
542
493
  state: peerConnection.iceConnectionState
543
- }, {
544
- F: __dxlog_file2,
545
- L: 124,
546
- S: this,
547
- C: (f, a) => f(...a)
548
- });
494
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 68, S: this });
549
495
  void this._persistentLifecycle.scheduleRestart();
550
496
  } else if (peerConnection.iceConnectionState === "disconnected") {
551
497
  const timeoutSeconds = 7;
552
498
  iceTimeout = window.setTimeout(() => {
553
499
  if (peerConnection.iceConnectionState === "connected") {
554
- log2.info("calls iceConnectionState is connected", void 0, {
555
- F: __dxlog_file2,
556
- L: 133,
557
- S: this,
558
- C: (f, a) => f(...a)
559
- });
500
+ log2.info("calls iceConnectionState is connected", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 79, S: this });
560
501
  return;
561
502
  }
562
- log2.warn("calls iceConnectionState timed out", {
503
+ log2.info("calls iceConnectionState timed out", {
563
504
  state: peerConnection.iceConnectionState,
564
505
  timeoutSeconds
565
- }, {
566
- F: __dxlog_file2,
567
- L: 137,
568
- S: this,
569
- C: (f, a) => f(...a)
570
- });
506
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 82, S: this });
571
507
  void this._persistentLifecycle.scheduleRestart();
572
508
  }, timeoutSeconds * 1e3);
573
509
  }
@@ -575,12 +511,7 @@ var CallsServicePeer = class extends Resource2 {
575
511
  return peerConnection;
576
512
  }
577
513
  async _initiateCallSession() {
578
- log2("creating new session", void 0, {
579
- F: __dxlog_file2,
580
- L: 147,
581
- S: this,
582
- C: (f, a) => f(...a)
583
- });
514
+ log2("creating new session", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 93, S: this });
584
515
  const { sessionId } = await this._fetch("/sessions/new?SESSION", {
585
516
  method: "POST"
586
517
  });
@@ -588,6 +519,7 @@ var CallsServicePeer = class extends Resource2 {
588
519
  }
589
520
  async _fetch(relativePath, requestInit) {
590
521
  this.history.push({
522
+ endpoint: relativePath,
591
523
  type: "request",
592
524
  time: (/* @__PURE__ */ new Date()).toISOString(),
593
525
  method: requestInit?.method ?? "GET",
@@ -601,17 +533,13 @@ var CallsServicePeer = class extends Resource2 {
601
533
  log2.error("error while fetching from Calls service", {
602
534
  status: response.status,
603
535
  text: await response.text()
604
- }, {
605
- F: __dxlog_file2,
606
- L: 162,
607
- S: this,
608
- C: (f, a) => f(...a)
609
- });
536
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 113, S: this });
610
537
  throw new Error("Error while fetching from Calls service");
611
538
  }
612
539
  try {
613
540
  const data = await response.clone().json();
614
541
  this.history.push({
542
+ endpoint: relativePath,
615
543
  type: "response",
616
544
  time: (/* @__PURE__ */ new Date()).toISOString(),
617
545
  status: response.status,
@@ -624,6 +552,7 @@ var CallsServicePeer = class extends Resource2 {
624
552
  } catch (error) {
625
553
  const text = await response.text();
626
554
  this.history.push({
555
+ endpoint: relativePath,
627
556
  type: "response",
628
557
  time: (/* @__PURE__ */ new Date()).toISOString(),
629
558
  status: response.status,
@@ -633,22 +562,12 @@ var CallsServicePeer = class extends Resource2 {
633
562
  error,
634
563
  text,
635
564
  status: response.status
636
- }, {
637
- F: __dxlog_file2,
638
- L: 187,
639
- S: this,
640
- C: (f, a) => f(...a)
641
- });
565
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 141, S: this });
642
566
  throw error;
643
567
  }
644
568
  }
645
569
  async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
646
- log2.verbose("pushing track ", trackName, {
647
- F: __dxlog_file2,
648
- L: 209,
649
- S: this,
650
- C: (f, a) => f(...a)
651
- });
570
+ log2.verbose("pushing track ", trackName, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 150, S: this });
652
571
  const pushedTrackPromise = this.pushTrackDispatcher.doBulkRequest({
653
572
  trackName,
654
573
  transceiver
@@ -670,15 +589,7 @@ var CallsServicePeer = class extends Resource2 {
670
589
  }))
671
590
  })
672
591
  });
673
- invariant2(response.tracks !== void 0, void 0, {
674
- F: __dxlog_file2,
675
- L: 234,
676
- S: this,
677
- A: [
678
- "response.tracks !== undefined",
679
- ""
680
- ]
681
- });
592
+ invariant3(response.tracks !== void 0, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 174, S: this, A: ["response.tracks !== undefined", ""] });
682
593
  if (!response.errorCode) {
683
594
  await peerConnection.setRemoteDescription(new RTCSessionDescription(response.sessionDescription));
684
595
  await peerConnectionIsConnected(peerConnection);
@@ -686,7 +597,7 @@ var CallsServicePeer = class extends Resource2 {
686
597
  return {
687
598
  tracks: response.tracks
688
599
  };
689
- })).then(({ tracks }) => {
600
+ })).then(async ({ tracks }) => {
690
601
  const trackData = tracks.find((t) => t.mid === transceiver.mid);
691
602
  if (trackData) {
692
603
  return {
@@ -695,20 +606,8 @@ var CallsServicePeer = class extends Resource2 {
695
606
  location: "remote"
696
607
  };
697
608
  } else {
698
- log2.error("missing track data", void 0, {
699
- F: __dxlog_file2,
700
- L: 254,
701
- S: this,
702
- C: (f, a) => f(...a)
703
- });
609
+ log2.error("missing track data", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 195, S: this });
704
610
  }
705
- }).catch((err) => {
706
- log2.catch(err, void 0, {
707
- F: __dxlog_file2,
708
- L: 258,
709
- S: this,
710
- C: (f, a) => f(...a)
711
- });
712
611
  });
713
612
  const onDispose = async () => {
714
613
  if (transceiver.mid) {
@@ -721,25 +620,12 @@ var CallsServicePeer = class extends Resource2 {
721
620
  }
722
621
  async pushTrack({ track, encodings = [], ctx, previousTrack }) {
723
622
  await this.waitUntilOpen();
724
- invariant2(this.session, void 0, {
725
- F: __dxlog_file2,
726
- L: 285,
727
- S: this,
728
- A: [
729
- "this.session",
730
- ""
731
- ]
732
- });
623
+ invariant3(this.session, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 209, S: this, A: ["this.session", ""] });
733
624
  log2("trying to push track", {
734
625
  track,
735
626
  previousTrack,
736
627
  encodings
737
- }, {
738
- F: __dxlog_file2,
739
- L: 286,
740
- S: this,
741
- C: (f, a) => f(...a)
742
- });
628
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 210, S: this });
743
629
  if (previousTrack) {
744
630
  const transceiver2 = this.session.peerConnection.getTransceivers().find((t) => t.mid === previousTrack.mid);
745
631
  if (transceiver2?.sender.track === track) {
@@ -747,52 +633,24 @@ var CallsServicePeer = class extends Resource2 {
747
633
  track,
748
634
  previousTrack,
749
635
  transceiver: transceiver2
750
- }, {
751
- F: __dxlog_file2,
752
- L: 290,
753
- S: this,
754
- C: (f, a) => f(...a)
755
- });
636
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 218, S: this });
756
637
  return previousTrack;
757
638
  } else if (transceiver2) {
758
639
  log2.verbose("replacing track", {
759
640
  track,
760
641
  previousTrack,
761
642
  transceiver: transceiver2
762
- }, {
763
- F: __dxlog_file2,
764
- L: 293,
765
- S: this,
766
- C: (f, a) => f(...a)
767
- });
768
- transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
769
- F: __dxlog_file2,
770
- L: 294,
771
- S: this,
772
- C: (f, a) => f(...a)
773
- }));
643
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 225, S: this });
644
+ transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 230, S: this }));
774
645
  return previousTrack;
775
646
  }
776
647
  }
777
- invariant2(track, void 0, {
778
- F: __dxlog_file2,
779
- L: 298,
780
- S: this,
781
- A: [
782
- "track",
783
- ""
784
- ]
785
- });
648
+ invariant3(track, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 234, S: this, A: ["track", ""] });
786
649
  const stableId = crypto.randomUUID();
787
650
  const transceiver = this.session.peerConnection.addTransceiver(track, {
788
651
  direction: "sendonly"
789
652
  });
790
- log2.verbose("creating transceiver", void 0, {
791
- F: __dxlog_file2,
792
- L: 303,
793
- S: this,
794
- C: (f, a) => f(...a)
795
- });
653
+ log2.verbose("creating transceiver", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 240, S: this });
796
654
  const pushedTrackData = await this._pushTrackInBulk({
797
655
  ctx,
798
656
  peerConnection: this.session.peerConnection,
@@ -800,15 +658,7 @@ var CallsServicePeer = class extends Resource2 {
800
658
  sessionId: this.session.sessionId,
801
659
  trackName: stableId
802
660
  });
803
- invariant2(pushedTrackData, void 0, {
804
- F: __dxlog_file2,
805
- L: 312,
806
- S: this,
807
- A: [
808
- "pushedTrackData",
809
- ""
810
- ]
811
- });
661
+ invariant3(pushedTrackData, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 248, S: this, A: ["pushedTrackData", ""] });
812
662
  const parameters = transceiver.sender.getParameters();
813
663
  encodings.forEach((encoding, i) => {
814
664
  const existing = parameters.encodings[i];
@@ -817,12 +667,7 @@ var CallsServicePeer = class extends Resource2 {
817
667
  ...encoding
818
668
  };
819
669
  });
820
- transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
821
- F: __dxlog_file2,
822
- L: 319,
823
- S: this,
824
- C: (f, a) => f(...a)
825
- }));
670
+ transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 257, S: this }));
826
671
  return pushedTrackData;
827
672
  }
828
673
  // TODO(mykola): Add retry logic if the tracks fails to pull.
@@ -830,12 +675,7 @@ var CallsServicePeer = class extends Resource2 {
830
675
  let mid = "";
831
676
  log2("pulling track", {
832
677
  trackName: trackData.trackName
833
- }, {
834
- F: __dxlog_file2,
835
- L: 337,
836
- S: this,
837
- C: (f, a) => f(...a)
838
- });
678
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 263, S: this });
839
679
  const pulledTrackPromise = this.pullTrackDispatcher.doBulkRequest(trackData, (tracks) => this.taskScheduler.schedule(async () => {
840
680
  const newTrackResponse = await this._fetch(`/sessions/${sessionId}/tracks/new?PULLING`, {
841
681
  method: "POST",
@@ -846,19 +686,11 @@ var CallsServicePeer = class extends Resource2 {
846
686
  if (newTrackResponse.errorCode) {
847
687
  throw new Error(newTrackResponse.errorDescription);
848
688
  }
849
- invariant2(newTrackResponse.tracks, void 0, {
850
- F: __dxlog_file2,
851
- L: 350,
852
- S: this,
853
- A: [
854
- "newTrackResponse.tracks",
855
- ""
856
- ]
857
- });
689
+ invariant3(newTrackResponse.tracks, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 276, S: this, A: ["newTrackResponse.tracks", ""] });
858
690
  const trackMap = tracks.reduce((acc, track) => {
859
691
  const pulledTrackData = newTrackResponse.tracks?.find((t) => t.trackName === track.trackName && t.sessionId === track.sessionId);
860
692
  if (pulledTrackData && pulledTrackData.mid) {
861
- acc.set(track, {
693
+ acc.set(track.trackName, {
862
694
  mid: pulledTrackData.mid,
863
695
  resolvedTrack: resolveTrack(peerConnection, (t) => t.mid === pulledTrackData.mid)
864
696
  });
@@ -888,34 +720,22 @@ var CallsServicePeer = class extends Resource2 {
888
720
  trackMap
889
721
  };
890
722
  })).then(({ trackMap }) => {
891
- const trackInfo = trackMap.get(trackData);
723
+ const trackInfo = trackMap.get(trackData.trackName);
892
724
  if (trackInfo) {
893
725
  return trackInfo.resolvedTrack.then((track) => {
894
726
  mid = trackInfo.mid;
895
727
  return track;
896
- }).catch((err) => log2.catch(err, void 0, {
897
- F: __dxlog_file2,
898
- L: 402,
899
- S: this,
900
- C: (f, a) => f(...a)
901
- }));
728
+ }).catch((err) => log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 315, S: this }));
902
729
  } else {
903
- log2.error("missing track info", void 0, {
904
- F: __dxlog_file2,
905
- L: 404,
906
- S: this,
907
- C: (f, a) => f(...a)
908
- });
730
+ log2.info("missing track info", {
731
+ trackData,
732
+ availableTracks: Array.from(trackMap.keys())
733
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 317, S: this });
909
734
  }
910
735
  });
911
736
  const onDispose = async () => {
912
737
  if (mid) {
913
- log2("closing pulled track ", trackData.trackName, {
914
- F: __dxlog_file2,
915
- L: 410,
916
- S: this,
917
- C: (f, a) => f(...a)
918
- });
738
+ log2("closing pulled track ", trackData.trackName, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 325, S: this });
919
739
  await this._closeTrackInBulk(peerConnection, mid, sessionId);
920
740
  mid = "";
921
741
  }
@@ -926,15 +746,7 @@ var CallsServicePeer = class extends Resource2 {
926
746
  }
927
747
  async pullTrack({ ctx, trackData }) {
928
748
  await this.waitUntilOpen();
929
- invariant2(this.session, void 0, {
930
- F: __dxlog_file2,
931
- L: 431,
932
- S: this,
933
- A: [
934
- "this.session",
935
- ""
936
- ]
937
- });
749
+ invariant3(this.session, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 336, S: this, A: ["this.session", ""] });
938
750
  const session = this.session;
939
751
  return this._pullTrackInBulk({
940
752
  peerConnection: session.peerConnection,
@@ -1012,9 +824,9 @@ var peerConnectionIsConnected = async (peerConnection) => {
1012
824
  }
1013
825
  };
1014
826
 
1015
- // packages/plugins/plugin-thread/src/calls/util/media.ts
827
+ // src/calls/util/media.ts
1016
828
  import { log as log3 } from "@dxos/log";
1017
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
829
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
1018
830
  var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1019
831
  deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);
1020
832
  const firstDevice = deviceList[0];
@@ -1025,12 +837,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
1025
837
  };
1026
838
  var acquireTrack = async (device, constraints) => {
1027
839
  const { deviceId, label } = device;
1028
- log3.info(`requesting ${label}`, void 0, {
1029
- F: __dxlog_file3,
1030
- L: 23,
1031
- S: void 0,
1032
- C: (f, a) => f(...a)
1033
- });
840
+ log3.info(`requesting ${label}`, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 15, S: void 0 });
1034
841
  const mediaStream = await navigator.mediaDevices.getUserMedia(device.kind === "videoinput" ? {
1035
842
  video: {
1036
843
  ...constraints,
@@ -1068,58 +875,7 @@ var getScreenshare = async ({ contentHint }) => {
1068
875
  return ms;
1069
876
  };
1070
877
 
1071
- // packages/plugins/plugin-thread/src/calls/util/stub-media-streams.ts
1072
- import { waitForCondition, scheduleTaskInterval as scheduleTaskInterval2 } from "@dxos/async";
1073
- import { cancelWithContext } from "@dxos/context";
1074
- import { invariant as invariant3 } from "@dxos/invariant";
1075
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/stub-media-streams.ts";
1076
- var createBlackCanvasStreamTrack = async ({ ctx, width, height }) => {
1077
- const canvas = document.createElement("canvas");
1078
- canvas.width = width;
1079
- canvas.height = height;
1080
- const canvasCtx = canvas.getContext("2d");
1081
- invariant3(canvasCtx, void 0, {
1082
- F: __dxlog_file4,
1083
- L: 28,
1084
- S: void 0,
1085
- A: [
1086
- "canvasCtx",
1087
- ""
1088
- ]
1089
- });
1090
- const drawFrame = () => {
1091
- canvasCtx.fillStyle = "black";
1092
- canvasCtx.fillRect(0, 0, canvas.width, canvas.height);
1093
- };
1094
- scheduleTaskInterval2(ctx, async () => drawFrame(), 1e3);
1095
- const track = canvas.captureStream().getVideoTracks()[0];
1096
- drawFrame();
1097
- await cancelWithContext(ctx, waitForCondition({
1098
- condition: () => track.readyState === "live",
1099
- timeout: 1e3
1100
- }));
1101
- return track;
1102
- };
1103
- var createInaudibleAudioStreamTrack = async ({ ctx }) => {
1104
- const audioContext = new window.AudioContext();
1105
- const oscillator = audioContext.createOscillator();
1106
- oscillator.type = "triangle";
1107
- oscillator.frequency.setValueAtTime(0.1, audioContext.currentTime);
1108
- const gainNode = audioContext.createGain();
1109
- gainNode.gain.setValueAtTime(0, audioContext.currentTime);
1110
- oscillator.connect(gainNode);
1111
- const destination = audioContext.createMediaStreamDestination();
1112
- gainNode.connect(destination);
1113
- oscillator.start();
1114
- ctx.onDispose(async () => {
1115
- oscillator.disconnect();
1116
- oscillator.stop();
1117
- await audioContext.close();
1118
- });
1119
- return destination.stream.getAudioTracks()[0];
1120
- };
1121
-
1122
- // packages/plugins/plugin-thread/src/calls/speaking-monitor.ts
878
+ // src/calls/speaking-monitor.ts
1123
879
  import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
1124
880
  import { Resource as Resource3 } from "@dxos/context";
1125
881
  var NOT_SPEAKING_AFTER = 500;
@@ -1127,8 +883,20 @@ var START_SPEAKING_THRESHOLD = 0.05;
1127
883
  var CONTINUE_SPEAKING_THRESHOLD = 0.02;
1128
884
  var MIN_EVENT_INTERVAL = 100;
1129
885
  var SpeakingMonitor = class extends Resource3 {
886
+ _mediaStreamTrack;
887
+ /**
888
+ * Event that is emitted when the user starts or stops speaking.
889
+ * It is debounced to prevent rapid state changes.
890
+ */
891
+ speakingChanged = new Event2();
892
+ /**
893
+ * Real state of the user speaking.
894
+ */
895
+ _isSpeaking = false;
896
+ _lastEventTime = 0;
897
+ _deferredUpdate;
1130
898
  constructor(_mediaStreamTrack) {
1131
- super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
899
+ super(), this._mediaStreamTrack = _mediaStreamTrack;
1132
900
  }
1133
901
  get isSpeaking() {
1134
902
  return this._isSpeaking;
@@ -1175,37 +943,36 @@ var SpeakingMonitor = class extends Resource3 {
1175
943
  }
1176
944
  };
1177
945
 
1178
- // packages/plugins/plugin-thread/src/calls/media-manager.ts
946
+ // src/calls/media-manager.ts
1179
947
  import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
1180
- import { cancelWithContext as cancelWithContext2, Resource as Resource4 } from "@dxos/context";
948
+ import { Resource as Resource4, cancelWithContext } from "@dxos/context";
949
+ import { invariant as invariant4 } from "@dxos/invariant";
1181
950
  import { log as log4 } from "@dxos/log";
951
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
1182
952
  function _ts_decorate2(decorators, target, key, desc) {
1183
953
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1184
954
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1185
955
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1186
956
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1187
957
  }
1188
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
1189
958
  var VIDEO_WIDTH = 1280;
1190
959
  var VIDEO_HEIGHT = 720;
1191
960
  var MAX_WEB_CAM_FRAMERATE = 24;
1192
961
  var MAX_WEB_CAM_BITRATE = 12e5;
1193
- var RETRY_INTERVAL = 500;
962
+ var RETRY_INTERVAL = 100;
963
+ var USE_INAUDIBLE_AUDIO = true;
1194
964
  var MediaManager = class extends Resource4 {
1195
- constructor() {
1196
- super(...arguments);
1197
- this.stateUpdated = new Event3();
1198
- this._state = {
1199
- pulledVideoStreams: {},
1200
- pulledAudioTracks: {}
1201
- };
1202
- this._speakingMonitor = void 0;
1203
- this._trackToReconcile = [];
1204
- this._blackCanvasStreamTrack = void 0;
1205
- this._inaudibleAudioStreamTrack = void 0;
1206
- this._pushTracksTask = void 0;
1207
- this._pullTracksTask = void 0;
1208
- }
965
+ stateUpdated = new Event3();
966
+ _state = {
967
+ pulledVideoStreams: {},
968
+ pulledAudioTracks: {}
969
+ };
970
+ _speakingMonitor = void 0;
971
+ _trackToReconcile = [];
972
+ _blackCanvasStreamTrack = void 0;
973
+ _inaudibleAudioStreamTrack = void 0;
974
+ _pushTracksTask = void 0;
975
+ _pullTracksTask = void 0;
1209
976
  get isSpeaking() {
1210
977
  return this._speakingMonitor?.isSpeaking;
1211
978
  }
@@ -1224,10 +991,12 @@ var MediaManager = class extends Resource4 {
1224
991
  this._state.videoTrack = this._blackCanvasStreamTrack;
1225
992
  this._state.videoStream = new MediaStream();
1226
993
  this._state.videoStream.addTrack(this._state.videoTrack);
1227
- this._inaudibleAudioStreamTrack = await createInaudibleAudioStreamTrack({
1228
- ctx: this._ctx
1229
- });
1230
- this._state.audioTrack = this._inaudibleAudioStreamTrack;
994
+ if (USE_INAUDIBLE_AUDIO) {
995
+ this._inaudibleAudioStreamTrack = await createInaudibleAudioStreamTrack({
996
+ ctx: this._ctx
997
+ });
998
+ this._state.audioTrack = this._inaudibleAudioStreamTrack;
999
+ }
1231
1000
  this._pushTracksTask = new DeferredTask3(this._ctx, async () => {
1232
1001
  await this._pushTracks();
1233
1002
  });
@@ -1302,11 +1071,14 @@ var MediaManager = class extends Resource4 {
1302
1071
  async turnAudioOff() {
1303
1072
  void this._speakingMonitor?.close();
1304
1073
  this._speakingMonitor = void 0;
1305
- if (this._state.audioTrack !== this._inaudibleAudioStreamTrack) {
1074
+ this._state.audioEnabled = false;
1075
+ if (USE_INAUDIBLE_AUDIO && this._state.audioTrack !== this._inaudibleAudioStreamTrack) {
1306
1076
  this._state.audioTrack?.stop();
1307
1077
  this._state.audioTrack = this._inaudibleAudioStreamTrack;
1078
+ } else {
1079
+ this._state.audioTrack?.stop();
1080
+ this._state.audioTrack = void 0;
1308
1081
  }
1309
- this._state.audioEnabled = false;
1310
1082
  this.stateUpdated.emit(this._state);
1311
1083
  this._pushTracksTask.schedule();
1312
1084
  }
@@ -1338,13 +1110,8 @@ var MediaManager = class extends Resource4 {
1338
1110
  this._pullTracksTask.schedule();
1339
1111
  }
1340
1112
  async _reconcilePulledMedia() {
1341
- log4("reconciling tracks", void 0, {
1342
- F: __dxlog_file5,
1343
- L: 215,
1344
- S: this,
1345
- C: (f, a) => f(...a)
1346
- });
1347
- await cancelWithContext2(this._ctx, sleep2(800));
1113
+ log4("reconciling tracks", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 171, S: this });
1114
+ await cancelWithContext(this._ctx, sleep2(800));
1348
1115
  const trackNames = this._trackToReconcile;
1349
1116
  const tracksToPull = trackNames.filter((name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name]);
1350
1117
  const audioTracksToClose = Object.entries(this._state.pulledAudioTracks).filter(([key]) => !trackNames.some((name) => name === key));
@@ -1356,13 +1123,8 @@ var MediaManager = class extends Resource4 {
1356
1123
  audioTracksToClose,
1357
1124
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
1358
1125
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1359
- }, {
1360
- F: __dxlog_file5,
1361
- L: 234,
1362
- S: this,
1363
- C: (f, a) => f(...a)
1364
- });
1365
- await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1126
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 180, S: this });
1127
+ const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
1366
1128
  await Promise.all([
1367
1129
  ...audioTracksToClose,
1368
1130
  ...videoStreamsToClose
@@ -1370,56 +1132,72 @@ var MediaManager = class extends Resource4 {
1370
1132
  log4("reconciled tracks", {
1371
1133
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
1372
1134
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
1373
- }, {
1374
- F: __dxlog_file5,
1375
- L: 249,
1376
- S: this,
1377
- C: (f, a) => f(...a)
1378
- });
1135
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 195, S: this });
1379
1136
  this.stateUpdated.emit(this._state);
1137
+ if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
1138
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1139
+ log4.info("retrying pull tracks", {
1140
+ tracksToPull
1141
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 202, S: this });
1142
+ invariant4(this._pullTracksTask, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 205, S: this, A: ["this._pullTracksTask", ""] });
1143
+ this._pullTracksTask.schedule();
1144
+ }
1380
1145
  }
1381
1146
  async _pushTracks() {
1382
1147
  if (!this._state.peer?.isOpen) {
1383
1148
  return;
1384
1149
  }
1385
1150
  let updated = false;
1386
- const [pushedVideoTrack, pushedAudioTrack, pushedScreenshareTrack] = await Promise.all([
1387
- this._pushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1151
+ const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
1152
+ this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
1388
1153
  {
1389
1154
  maxFramerate: MAX_WEB_CAM_FRAMERATE,
1390
1155
  maxBitrate: MAX_WEB_CAM_BITRATE
1391
1156
  }
1392
1157
  ]),
1393
- this._pushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1158
+ this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
1394
1159
  {
1395
1160
  networkPriority: "high"
1396
1161
  }
1397
1162
  ]),
1398
- this._pushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1163
+ this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
1399
1164
  ]);
1400
- if (pushedVideoTrack !== this._state.pushedVideoTrack) {
1401
- this._state.pushedVideoTrack = pushedVideoTrack;
1165
+ if (pushVideoResult.track !== this._state.pushedVideoTrack) {
1166
+ this._state.pushedVideoTrack = pushVideoResult.track;
1402
1167
  updated = true;
1403
1168
  }
1404
- if (pushedAudioTrack !== this._state.pushedAudioTrack) {
1405
- this._state.pushedAudioTrack = pushedAudioTrack;
1169
+ if (pushAudioResult.track !== this._state.pushedAudioTrack) {
1170
+ this._state.pushedAudioTrack = pushAudioResult.track;
1406
1171
  updated = true;
1407
1172
  }
1408
- if (pushedScreenshareTrack !== this._state.pushedScreenshareTrack) {
1409
- this._state.pushedScreenshareTrack = pushedScreenshareTrack;
1173
+ if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
1174
+ this._state.pushedScreenshareTrack = pushScreenshareResult.track;
1410
1175
  updated = true;
1411
1176
  }
1412
- if (!updated) {
1413
- return;
1177
+ const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
1178
+ if (updated) {
1179
+ this.stateUpdated.emit(this._state);
1180
+ }
1181
+ if (shouldRetry) {
1182
+ await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
1183
+ log4.info("retrying push tracks", {
1184
+ pushVideoResult,
1185
+ pushAudioResult,
1186
+ pushScreenshareResult
1187
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 246, S: this });
1188
+ invariant4(this._pushTracksTask, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 251, S: this, A: ["this._pushTracksTask", ""] });
1189
+ this._pushTracksTask.schedule();
1414
1190
  }
1415
- this.stateUpdated.emit(this._state);
1416
1191
  }
1417
1192
  async _pullTrack(name) {
1418
1193
  const ctx = this._ctx.derive();
1419
1194
  try {
1420
1195
  const trackData = TrackNameCodec.decode(name);
1421
1196
  const track = await this._state.peer.pullTrack({
1422
- trackData,
1197
+ trackData: {
1198
+ ...trackData,
1199
+ mid: void 0
1200
+ },
1423
1201
  ctx
1424
1202
  });
1425
1203
  if (track?.readyState === "ended") {
@@ -1432,7 +1210,9 @@ var MediaManager = class extends Resource4 {
1432
1210
  ctx
1433
1211
  };
1434
1212
  ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
1435
- break;
1213
+ return {
1214
+ shouldRetry: false
1215
+ };
1436
1216
  }
1437
1217
  case "video": {
1438
1218
  const mediaStream = new MediaStream();
@@ -1446,43 +1226,52 @@ var MediaManager = class extends Resource4 {
1446
1226
  track.stop();
1447
1227
  delete this._state.pulledVideoStreams[name];
1448
1228
  });
1449
- break;
1229
+ return {
1230
+ shouldRetry: false
1231
+ };
1450
1232
  }
1451
1233
  default:
1452
1234
  throw new Error(`Invalid track kind: ${track?.kind}`);
1453
1235
  }
1454
1236
  } catch (err) {
1455
- log4.verbose("failed to pull track", {
1237
+ log4.info("failed to pull track", {
1456
1238
  err,
1457
1239
  name
1458
- }, {
1459
- F: __dxlog_file5,
1460
- L: 319,
1461
- S: this,
1462
- C: (f, a) => f(...a)
1463
- });
1240
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 303, S: this });
1464
1241
  void ctx.dispose();
1465
- await cancelWithContext2(this._ctx, sleep2(RETRY_INTERVAL));
1466
- log4.verbose("retrying pull track", {
1467
- name
1468
- }, {
1469
- F: __dxlog_file5,
1470
- L: 322,
1471
- S: this,
1472
- C: (f, a) => f(...a)
1473
- });
1474
- this._pullTracksTask.schedule();
1242
+ return {
1243
+ shouldRetry: true
1244
+ };
1475
1245
  }
1476
1246
  }
1477
- async _pushTrack(track, previousTrack, encodings) {
1247
+ async _maybePushTrack(track, previousTrack, encodings) {
1478
1248
  if (!track && !previousTrack) {
1479
- return;
1249
+ return {
1250
+ track: void 0
1251
+ };
1252
+ }
1253
+ const ctx = this._ctx.derive();
1254
+ try {
1255
+ return {
1256
+ track: await this._state.peer.pushTrack({
1257
+ ctx,
1258
+ track: track ?? null,
1259
+ previousTrack,
1260
+ encodings
1261
+ })
1262
+ };
1263
+ } catch (err) {
1264
+ log4.info("failed to push track", {
1265
+ err,
1266
+ track,
1267
+ previousTrack,
1268
+ encodings
1269
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 330, S: this });
1270
+ void ctx.dispose();
1271
+ return {
1272
+ shouldRetry: true
1273
+ };
1480
1274
  }
1481
- return this._state.peer.pushTrack({
1482
- track: track ?? null,
1483
- previousTrack,
1484
- encodings
1485
- });
1486
1275
  }
1487
1276
  };
1488
1277
  _ts_decorate2([
@@ -1492,68 +1281,104 @@ _ts_decorate2([
1492
1281
  synchronized2
1493
1282
  ], MediaManager.prototype, "leave", null);
1494
1283
 
1495
- // packages/plugins/plugin-thread/src/calls/call-manager.ts
1496
- import { computed } from "@preact/signals-core";
1284
+ // src/calls/call-manager.ts
1285
+ import { Atom } from "@effect-atom/atom-react";
1497
1286
  import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
1498
1287
  import { Resource as Resource5 } from "@dxos/context";
1499
- import { invariant as invariant4 } from "@dxos/invariant";
1500
- import { live } from "@dxos/live-object";
1288
+ import { invariant as invariant5 } from "@dxos/invariant";
1501
1289
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
1290
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1502
1291
  function _ts_decorate3(decorators, target, key, desc) {
1503
1292
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1504
1293
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1505
1294
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1506
1295
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1507
1296
  }
1508
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
1509
1297
  var CallManager = class extends Resource5 {
1510
- /** @reactive */
1511
- get roomId() {
1512
- return this._state.call.roomId;
1513
- }
1514
- /** @reactive */
1515
- get raisedHand() {
1516
- return this._raisedHandSignal.value;
1517
- }
1518
- /** @reactive */
1519
- get speaking() {
1520
- return this._speakingSignal.value;
1521
- }
1522
- /** @reactive */
1523
- get joined() {
1524
- return this._joinedSignal.value;
1525
- }
1526
- /** @reactive */
1527
- get self() {
1528
- return this._state.call.self ?? {};
1529
- }
1530
- /** @reactive */
1531
- get tracks() {
1532
- return this._state.call.tracks ?? {};
1533
- }
1534
- /** @reactive */
1535
- get users() {
1536
- return this._state.call.users ?? [];
1537
- }
1538
- /** @reactive */
1539
- get media() {
1540
- return this._state.media;
1541
- }
1542
- /** @reactive */
1543
- get pulledAudioTracks() {
1544
- return Object.values(this._state.media.pulledAudioTracks).map((track) => track.track);
1545
- }
1546
- /** @reactive */
1547
- get state() {
1548
- return this._state;
1549
- }
1550
- /** @reactive */
1551
- getVideoStream(name) {
1552
- return name ? this._state.media.pulledVideoStreams[name]?.stream : void 0;
1553
- }
1554
- /** @reactive */
1555
- getActivity(key) {
1556
- return this._state.call.activities?.[key];
1298
+ _client;
1299
+ _registry;
1300
+ callStateUpdated = new Event4();
1301
+ // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
1302
+ mediaStateUpdated = new Event4();
1303
+ left = new Event4();
1304
+ /**
1305
+ * Atom-based state. Updated via `_updateState()`.
1306
+ * CAUTION: Do not change directly.
1307
+ */
1308
+ _stateAtom = Atom.make({
1309
+ call: {},
1310
+ media: {
1311
+ pulledAudioTracks: {},
1312
+ pulledVideoStreams: {}
1313
+ }
1314
+ });
1315
+ // Derived atoms for reactive subscriptions.
1316
+ _roomIdAtom = Atom.make((get) => get(this._stateAtom).call.roomId);
1317
+ _raisedHandAtom = Atom.make((get) => get(this._stateAtom).call.raisedHand ?? false);
1318
+ _speakingAtom = Atom.make((get) => get(this._stateAtom).call.speaking ?? false);
1319
+ _joinedAtom = Atom.make((get) => get(this._stateAtom).call.joined ?? false);
1320
+ _selfAtom = Atom.make((get) => get(this._stateAtom).call.self ?? {});
1321
+ _tracksAtom = Atom.make((get) => get(this._stateAtom).call.tracks ?? {});
1322
+ _usersAtom = Atom.make((get) => get(this._stateAtom).call.users ?? []);
1323
+ _mediaAtom = Atom.make((get) => get(this._stateAtom).media);
1324
+ _audioTracksToPlayAtom = Atom.make((get) => {
1325
+ const state = get(this._stateAtom);
1326
+ return (state.call.users ?? []).map((user) => user.tracks?.audioEnabled ? user.tracks?.audio : void 0).filter(isNonNullable2).map((track) => state.media.pulledAudioTracks[track]?.track).filter(isNonNullable2);
1327
+ });
1328
+ _videoStreamAtomFamily = Atom.family((name) => Atom.make((get) => get(this._stateAtom).media.pulledVideoStreams[name]?.stream));
1329
+ _activityAtomFamily = Atom.family((key) => Atom.make((get) => get(this._stateAtom).call.activities?.[key]));
1330
+ _swarmSynchronizer;
1331
+ _mediaManager;
1332
+ //
1333
+ // Derived atoms for reactive UI subscriptions.
1334
+ //
1335
+ /** Derived atom for roomId. */
1336
+ get roomIdAtom() {
1337
+ return this._roomIdAtom;
1338
+ }
1339
+ /** Derived atom for raisedHand. */
1340
+ get raisedHandAtom() {
1341
+ return this._raisedHandAtom;
1342
+ }
1343
+ /** Derived atom for speaking. */
1344
+ get speakingAtom() {
1345
+ return this._speakingAtom;
1346
+ }
1347
+ /** Derived atom for joined. */
1348
+ get joinedAtom() {
1349
+ return this._joinedAtom;
1350
+ }
1351
+ /** Derived atom for self. */
1352
+ get selfAtom() {
1353
+ return this._selfAtom;
1354
+ }
1355
+ /** Derived atom for tracks. */
1356
+ get tracksAtom() {
1357
+ return this._tracksAtom;
1358
+ }
1359
+ /** Derived atom for users. */
1360
+ get usersAtom() {
1361
+ return this._usersAtom;
1362
+ }
1363
+ /** Derived atom for media. */
1364
+ get mediaAtom() {
1365
+ return this._mediaAtom;
1366
+ }
1367
+ /** Derived atom for audioTracksToPlay. */
1368
+ get audioTracksToPlayAtom() {
1369
+ return this._audioTracksToPlayAtom;
1370
+ }
1371
+ /** Returns the full state atom for reactive subscriptions. */
1372
+ get stateAtom() {
1373
+ return this._stateAtom;
1374
+ }
1375
+ /** Returns a derived atom for a video stream by name. */
1376
+ videoStreamAtom(name) {
1377
+ return this._videoStreamAtomFamily(name);
1378
+ }
1379
+ /** Returns a derived atom for an activity by key. */
1380
+ activityAtom(key) {
1381
+ return this._activityAtomFamily(key);
1557
1382
  }
1558
1383
  setRoomId(roomId) {
1559
1384
  this._swarmSynchronizer._setRoomId(roomId);
@@ -1586,25 +1411,11 @@ var CallManager = class extends Resource5 {
1586
1411
  return this._mediaManager.turnScreenshareOff();
1587
1412
  }
1588
1413
  // TODO(burdon): Can this be mocked?
1589
- constructor(_client) {
1590
- super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
1591
- call: {},
1592
- media: {
1593
- pulledAudioTracks: {},
1594
- pulledVideoStreams: {}
1595
- }
1596
- }), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
1414
+ constructor(_client, _registry) {
1415
+ super(), this._client = _client, this._registry = _registry;
1597
1416
  this._client.config.getOrThrow("runtime.services.edge.url");
1598
1417
  const networkService = this._client.services.services.NetworkService;
1599
- invariant4(networkService, "network service not found", {
1600
- F: __dxlog_file6,
1601
- L: 155,
1602
- S: this,
1603
- A: [
1604
- "networkService",
1605
- "'network service not found'"
1606
- ]
1607
- });
1418
+ invariant5(networkService, "network service not found", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 128, S: this, A: ["networkService", "'network service not found'"] });
1608
1419
  this._swarmSynchronizer = new CallSwarmSynchronizer({
1609
1420
  networkService
1610
1421
  });
@@ -1647,10 +1458,11 @@ var CallManager = class extends Resource5 {
1647
1458
  this._swarmSynchronizer.setJoined(false);
1648
1459
  await this._swarmSynchronizer.leave();
1649
1460
  await this._mediaManager.leave();
1650
- this.roomId && this.left.emit(this.roomId);
1461
+ const roomId = this._registry.get(this._roomIdAtom);
1462
+ roomId && this.left.emit(roomId);
1651
1463
  }
1652
1464
  _onCallStateUpdated(state) {
1653
- const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self?.id)?.flatMap((user) => [
1465
+ const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self.id)?.flatMap((user) => [
1654
1466
  user.tracks?.video,
1655
1467
  user.tracks?.audio,
1656
1468
  user.tracks?.screenshare
@@ -1680,8 +1492,10 @@ var CallManager = class extends Resource5 {
1680
1492
  * Only this method is allowed to change state.
1681
1493
  */
1682
1494
  _updateState() {
1683
- this._state.call = this._swarmSynchronizer._getState();
1684
- this._state.media = this._mediaManager._getState();
1495
+ this._registry.set(this._stateAtom, {
1496
+ call: this._swarmSynchronizer._getState(),
1497
+ media: this._mediaManager._getState()
1498
+ });
1685
1499
  }
1686
1500
  };
1687
1501
  _ts_decorate3([
@@ -1701,10 +1515,8 @@ export {
1701
1515
  getUserMediaTrack,
1702
1516
  getDeviceList,
1703
1517
  getScreenshare,
1704
- createBlackCanvasStreamTrack,
1705
- createInaudibleAudioStreamTrack,
1706
1518
  SpeakingMonitor,
1707
1519
  MediaManager,
1708
1520
  CallManager
1709
1521
  };
1710
- //# sourceMappingURL=chunk-WXNPD542.mjs.map
1522
+ //# sourceMappingURL=chunk-PZ7WTAA2.mjs.map