@dxos/plugin-thread 0.8.4-main.fcfe5033a5 → 0.8.4-staging.60fe92afc8

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 (522) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +75 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs +57 -0
  5. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs.map +7 -0
  6. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs +38 -0
  7. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs.map +7 -0
  8. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs +57 -0
  9. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs.map +7 -0
  10. package/dist/lib/neutral/ThreadPlugin.mjs +67 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  12. package/dist/lib/neutral/ThreadPlugin.node.mjs +29 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  14. package/dist/lib/neutral/ThreadPlugin.workerd.mjs +27 -0
  15. package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
  16. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs +50 -0
  17. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs.map +7 -0
  18. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs +34 -0
  19. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs +58 -0
  23. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-AWAQTEU6.mjs +10 -0
  25. package/dist/lib/neutral/chunk-AWAQTEU6.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-HJHK5O6F.mjs +109 -0
  27. package/dist/lib/neutral/chunk-HJHK5O6F.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs +36 -0
  29. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-P4RSGFS4.mjs +69 -0
  31. package/dist/lib/neutral/chunk-P4RSGFS4.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-SZXFLBZL.mjs +8 -0
  33. package/dist/lib/neutral/chunk-SZXFLBZL.mjs.map +7 -0
  34. package/dist/lib/neutral/components/index.mjs +93 -0
  35. package/dist/lib/neutral/components/index.mjs.map +7 -0
  36. package/dist/lib/neutral/containers/index.mjs +13 -0
  37. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  38. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs +41 -0
  39. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs.map +7 -0
  40. package/dist/lib/neutral/create-object-RLCOUVAW.mjs +46 -0
  41. package/dist/lib/neutral/create-object-RLCOUVAW.mjs.map +7 -0
  42. package/dist/lib/neutral/hooks/index.mjs +11 -0
  43. package/dist/lib/neutral/index.mjs +34 -0
  44. package/dist/lib/neutral/meta.json +1 -0
  45. package/dist/lib/neutral/meta.mjs +10 -0
  46. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs +14 -0
  47. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs.map +7 -0
  48. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  49. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  50. package/dist/lib/neutral/operations/index.mjs +8 -0
  51. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  52. package/dist/lib/neutral/plugin.mjs +16 -0
  53. package/dist/lib/neutral/plugin.mjs.map +7 -0
  54. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs +48 -0
  55. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +91 -0
  57. package/dist/lib/neutral/translations.mjs.map +7 -0
  58. package/dist/lib/neutral/types/index.mjs +16 -0
  59. package/dist/lib/neutral/types/index.mjs.map +7 -0
  60. package/dist/types/src/ThreadPlugin.d.ts +1 -0
  61. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  62. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  63. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  64. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  65. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  66. package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
  67. package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/channel-backend-feed.d.ts +13 -0
  71. package/dist/types/src/capabilities/channel-backend-feed.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  73. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  74. package/dist/types/src/capabilities/index.d.ts +8 -10
  75. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/navigation-resolver.d.ts +6 -0
  77. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  79. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/components/Chat/Chat.d.ts +43 -0
  82. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  83. package/dist/types/src/components/Chat/index.d.ts +2 -0
  84. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  85. package/dist/types/src/components/index.d.ts +1 -5
  86. package/dist/types/src/components/index.d.ts.map +1 -1
  87. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +19 -0
  88. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
  89. package/dist/types/src/{components/CommentsPanel/CommentsPanel.stories.d.ts → containers/ChannelArticle/ChannelArticle.stories.d.ts} +74 -72
  90. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
  91. package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
  92. package/dist/types/src/{components/ThreadSettings → containers/ChannelArticle}/index.d.ts.map +1 -1
  93. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts +11 -0
  94. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts.map +1 -0
  95. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts +2 -0
  96. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts.map +1 -0
  97. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts +20 -0
  98. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts.map +1 -0
  99. package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadArticle/ThreadArticle.stories.d.ts} +71 -71
  100. package/dist/types/src/containers/ThreadArticle/ThreadArticle.stories.d.ts.map +1 -0
  101. package/dist/types/src/containers/ThreadArticle/index.d.ts +2 -0
  102. package/dist/types/src/containers/ThreadArticle/index.d.ts.map +1 -0
  103. package/dist/types/src/containers/index.d.ts +3 -5
  104. package/dist/types/src/containers/index.d.ts.map +1 -1
  105. package/dist/types/src/hooks/index.d.ts +1 -5
  106. package/dist/types/src/hooks/index.d.ts.map +1 -1
  107. package/dist/types/src/hooks/useMessages.d.ts +4 -0
  108. package/dist/types/src/hooks/useMessages.d.ts.map +1 -0
  109. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  110. package/dist/types/src/index.d.ts +2 -3
  111. package/dist/types/src/index.d.ts.map +1 -1
  112. package/dist/types/src/meta.d.ts +1 -1
  113. package/dist/types/src/meta.d.ts.map +1 -1
  114. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  115. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  116. package/dist/types/src/operations/create-channel.d.ts +3 -3
  117. package/dist/types/src/operations/create-channel.d.ts.map +1 -1
  118. package/dist/types/src/operations/index.d.ts +1 -2
  119. package/dist/types/src/operations/index.d.ts.map +1 -1
  120. package/dist/types/src/paths.d.ts +3 -0
  121. package/dist/types/src/paths.d.ts.map +1 -0
  122. package/dist/types/src/plugin.d.ts +4 -0
  123. package/dist/types/src/plugin.d.ts.map +1 -0
  124. package/dist/types/src/translations.d.ts +70 -70
  125. package/dist/types/src/translations.d.ts.map +1 -1
  126. package/dist/types/src/types/ThreadCapabilities.d.ts +37 -0
  127. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  128. package/dist/types/src/types/ThreadOperation.d.ts +91 -0
  129. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  130. package/dist/types/src/types/channel-backend.d.ts +16 -0
  131. package/dist/types/src/types/channel-backend.d.ts.map +1 -0
  132. package/dist/types/src/types/channel-backend.test.d.ts +2 -0
  133. package/dist/types/src/types/channel-backend.test.d.ts.map +1 -0
  134. package/dist/types/src/types/index.d.ts +3 -3
  135. package/dist/types/src/types/index.d.ts.map +1 -1
  136. package/dist/types/src/util.d.ts +4 -20
  137. package/dist/types/src/util.d.ts.map +1 -1
  138. package/dist/types/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +96 -114
  140. package/src/ThreadPlugin.node.ts +26 -0
  141. package/src/ThreadPlugin.test.ts +27 -0
  142. package/src/ThreadPlugin.tsx +23 -105
  143. package/src/ThreadPlugin.workerd.ts +25 -0
  144. package/src/capabilities/app-graph-builder.ts +25 -167
  145. package/src/capabilities/channel-backend-feed.ts +60 -0
  146. package/src/capabilities/create-object.ts +46 -0
  147. package/src/capabilities/index.ts +4 -8
  148. package/src/capabilities/navigation-resolver.ts +18 -0
  149. package/src/capabilities/operation-handler.ts +1 -1
  150. package/src/capabilities/react-surface.tsx +8 -50
  151. package/src/components/Chat/Chat.tsx +119 -0
  152. package/src/components/Chat/index.ts +5 -0
  153. package/src/components/index.ts +1 -7
  154. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +108 -0
  155. package/src/containers/ChannelArticle/ChannelArticle.tsx +83 -0
  156. package/src/containers/ChannelArticle/index.ts +5 -0
  157. package/src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx +52 -0
  158. package/src/containers/ChannelCreatePanel/index.ts +5 -0
  159. package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadArticle/ThreadArticle.stories.tsx} +11 -12
  160. package/src/containers/ThreadArticle/ThreadArticle.tsx +75 -0
  161. package/src/containers/ThreadArticle/index.ts +5 -0
  162. package/src/containers/index.ts +3 -5
  163. package/src/hooks/index.ts +1 -6
  164. package/src/hooks/useMessages.ts +37 -0
  165. package/src/index.ts +4 -4
  166. package/src/meta.ts +22 -8
  167. package/src/operations/append-channel-message.ts +31 -0
  168. package/src/operations/create-channel.ts +18 -8
  169. package/src/operations/index.ts +2 -14
  170. package/src/paths.ts +10 -0
  171. package/src/plugin.ts +11 -0
  172. package/src/translations.ts +2 -1
  173. package/src/types/ThreadCapabilities.ts +47 -0
  174. package/src/types/ThreadOperation.ts +49 -0
  175. package/src/types/channel-backend.test.ts +48 -0
  176. package/src/types/channel-backend.ts +54 -0
  177. package/src/types/index.ts +3 -3
  178. package/src/util.ts +35 -18
  179. package/src/vite-env.d.ts +10 -0
  180. package/dist/lib/browser/add-message-VPPFFLFL.mjs +0 -97
  181. package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
  182. package/dist/lib/browser/blueprints/index.mjs +0 -37
  183. package/dist/lib/browser/blueprints/index.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
  185. package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-VPM44Z35.mjs +0 -259
  187. package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
  188. package/dist/lib/browser/create-OQKG4S47.mjs +0 -55
  189. package/dist/lib/browser/create-OQKG4S47.mjs.map +0 -7
  190. package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
  191. package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
  192. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
  193. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
  194. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs +0 -57
  195. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
  196. package/dist/lib/browser/delete-FSFVU6ZA.mjs +0 -59
  197. package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
  198. package/dist/lib/browser/delete-message-XL5M5J33.mjs +0 -64
  199. package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
  200. package/dist/lib/browser/index.mjs +0 -2334
  201. package/dist/lib/browser/index.mjs.map +0 -7
  202. package/dist/lib/browser/meta.json +0 -1
  203. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
  204. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
  205. package/dist/lib/browser/operations/index.mjs +0 -14
  206. package/dist/lib/browser/operations/index.mjs.map +0 -7
  207. package/dist/lib/browser/restore-2ZGMKUSD.mjs +0 -33
  208. package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
  209. package/dist/lib/browser/restore-message-OYEGWPII.mjs +0 -42
  210. package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
  211. package/dist/lib/browser/select-VG2XLULE.mjs +0 -26
  212. package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
  213. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs +0 -45
  214. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
  215. package/dist/lib/browser/types/index.mjs +0 -12
  216. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
  217. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
  218. package/dist/lib/node-esm/blueprints/index.mjs +0 -38
  219. package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  221. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
  222. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
  224. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
  225. package/dist/lib/node-esm/create-6ZOFMMYA.mjs +0 -56
  226. package/dist/lib/node-esm/create-6ZOFMMYA.mjs.map +0 -7
  227. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
  228. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
  229. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
  230. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
  231. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
  232. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
  233. package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
  234. package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
  235. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
  236. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
  237. package/dist/lib/node-esm/index.mjs +0 -2335
  238. package/dist/lib/node-esm/index.mjs.map +0 -7
  239. package/dist/lib/node-esm/meta.json +0 -1
  240. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
  241. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
  242. package/dist/lib/node-esm/operations/index.mjs +0 -15
  243. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  244. package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
  245. package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
  246. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
  247. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
  248. package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
  249. package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
  250. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
  251. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
  252. package/dist/lib/node-esm/types/index.mjs +0 -13
  253. package/dist/types/src/blueprints/index.d.ts +0 -2
  254. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  255. package/dist/types/src/blueprints/thread-blueprint.d.ts +0 -4
  256. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +0 -1
  257. package/dist/types/src/calls/call-manager.d.ts +0 -87
  258. package/dist/types/src/calls/call-manager.d.ts.map +0 -1
  259. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
  260. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
  261. package/dist/types/src/calls/index.d.ts +0 -7
  262. package/dist/types/src/calls/index.d.ts.map +0 -1
  263. package/dist/types/src/calls/media-manager.d.ts +0 -60
  264. package/dist/types/src/calls/media-manager.d.ts.map +0 -1
  265. package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
  266. package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
  267. package/dist/types/src/calls/types.d.ts +0 -45
  268. package/dist/types/src/calls/types.d.ts.map +0 -1
  269. package/dist/types/src/calls/util/audio.d.ts +0 -6
  270. package/dist/types/src/calls/util/audio.d.ts.map +0 -1
  271. package/dist/types/src/calls/util/calls-service.d.ts +0 -77
  272. package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
  273. package/dist/types/src/calls/util/history-cache.d.ts +0 -11
  274. package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
  275. package/dist/types/src/calls/util/index.d.ts +0 -5
  276. package/dist/types/src/calls/util/index.d.ts.map +0 -1
  277. package/dist/types/src/calls/util/media.d.ts +0 -6
  278. package/dist/types/src/calls/util/media.d.ts.map +0 -1
  279. package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
  280. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
  281. package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
  282. package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
  283. package/dist/types/src/calls-service.stories.d.ts +0 -23
  284. package/dist/types/src/calls-service.stories.d.ts.map +0 -1
  285. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  286. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  287. package/dist/types/src/capabilities/call-manager.d.ts +0 -6
  288. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/markdown.d.ts +0 -5
  290. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/react-root.d.ts +0 -9
  292. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/settings.d.ts +0 -7
  294. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/state.d.ts +0 -7
  296. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/undo-mappings.d.ts +0 -5
  298. package/dist/types/src/capabilities/undo-mappings.d.ts.map +0 -1
  299. package/dist/types/src/components/Call/Call.d.ts +0 -17
  300. package/dist/types/src/components/Call/Call.d.ts.map +0 -1
  301. package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
  302. package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
  303. package/dist/types/src/components/Call/index.d.ts +0 -3
  304. package/dist/types/src/components/Call/index.d.ts.map +0 -1
  305. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +0 -13
  306. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +0 -1
  307. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +0 -1
  308. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts +0 -14
  309. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +0 -1
  310. package/dist/types/src/components/CommentsPanel/index.d.ts +0 -3
  311. package/dist/types/src/components/CommentsPanel/index.d.ts.map +0 -1
  312. package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
  313. package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
  314. package/dist/types/src/components/Lobby/index.d.ts +0 -2
  315. package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
  316. package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
  317. package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
  318. package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
  319. package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
  320. package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
  321. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
  322. package/dist/types/src/components/Media/index.d.ts +0 -3
  323. package/dist/types/src/components/Media/index.d.ts.map +0 -1
  324. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +0 -15
  325. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +0 -1
  326. package/dist/types/src/components/MessagePanel/index.d.ts +0 -2
  327. package/dist/types/src/components/MessagePanel/index.d.ts.map +0 -1
  328. package/dist/types/src/components/Participant/Participant.d.ts +0 -6
  329. package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
  330. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
  331. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
  332. package/dist/types/src/components/Participant/index.d.ts +0 -3
  333. package/dist/types/src/components/Participant/index.d.ts.map +0 -1
  334. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
  335. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
  336. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
  337. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
  338. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
  339. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
  340. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
  341. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
  342. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
  343. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
  345. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
  346. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +0 -6
  347. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +0 -1
  348. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +0 -161
  349. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +0 -1
  350. package/dist/types/src/components/ThreadSettings/index.d.ts +0 -2
  351. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
  352. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
  353. package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
  354. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +0 -1
  355. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
  356. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
  357. package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
  358. package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
  359. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
  360. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
  361. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +0 -162
  362. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
  363. package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
  364. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
  365. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
  366. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  367. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
  368. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
  369. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  370. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +0 -8
  371. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +0 -1
  372. package/dist/types/src/containers/ThreadCompanion/index.d.ts +0 -2
  373. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +0 -1
  374. package/dist/types/src/extensions/command.d.ts +0 -3
  375. package/dist/types/src/extensions/command.d.ts.map +0 -1
  376. package/dist/types/src/extensions/index.d.ts +0 -3
  377. package/dist/types/src/extensions/index.d.ts.map +0 -1
  378. package/dist/types/src/extensions/threads.d.ts +0 -14
  379. package/dist/types/src/extensions/threads.d.ts.map +0 -1
  380. package/dist/types/src/hooks/analytics.d.ts +0 -3
  381. package/dist/types/src/hooks/analytics.d.ts.map +0 -1
  382. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
  383. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
  384. package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
  385. package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
  386. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
  387. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
  388. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
  389. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
  390. package/dist/types/src/operations/add-message.d.ts +0 -5
  391. package/dist/types/src/operations/add-message.d.ts.map +0 -1
  392. package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
  393. package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
  394. package/dist/types/src/operations/create-proposals.d.ts +0 -5
  395. package/dist/types/src/operations/create-proposals.d.ts.map +0 -1
  396. package/dist/types/src/operations/create.d.ts +0 -5
  397. package/dist/types/src/operations/create.d.ts.map +0 -1
  398. package/dist/types/src/operations/definitions.d.ts +0 -2804
  399. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  400. package/dist/types/src/operations/delete-message.d.ts +0 -5
  401. package/dist/types/src/operations/delete-message.d.ts.map +0 -1
  402. package/dist/types/src/operations/delete.d.ts +0 -5
  403. package/dist/types/src/operations/delete.d.ts.map +0 -1
  404. package/dist/types/src/operations/on-create-space.d.ts +0 -5
  405. package/dist/types/src/operations/on-create-space.d.ts.map +0 -1
  406. package/dist/types/src/operations/restore-message.d.ts +0 -5
  407. package/dist/types/src/operations/restore-message.d.ts.map +0 -1
  408. package/dist/types/src/operations/restore.d.ts +0 -5
  409. package/dist/types/src/operations/restore.d.ts.map +0 -1
  410. package/dist/types/src/operations/select.d.ts +0 -5
  411. package/dist/types/src/operations/select.d.ts.map +0 -1
  412. package/dist/types/src/operations/toggle-resolved.d.ts +0 -5
  413. package/dist/types/src/operations/toggle-resolved.d.ts.map +0 -1
  414. package/dist/types/src/testing/data.d.ts +0 -5
  415. package/dist/types/src/testing/data.d.ts.map +0 -1
  416. package/dist/types/src/testing/index.d.ts +0 -2
  417. package/dist/types/src/testing/index.d.ts.map +0 -1
  418. package/dist/types/src/testing/stories.d.ts +0 -3
  419. package/dist/types/src/testing/stories.d.ts.map +0 -1
  420. package/dist/types/src/types/Channel.d.ts +0 -715
  421. package/dist/types/src/types/Channel.d.ts.map +0 -1
  422. package/dist/types/src/types/Settings.d.ts +0 -5
  423. package/dist/types/src/types/Settings.d.ts.map +0 -1
  424. package/dist/types/src/types/capabilities.d.ts +0 -24
  425. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  426. package/dist/types/src/types/types.d.ts +0 -18
  427. package/dist/types/src/types/types.d.ts.map +0 -1
  428. package/src/blueprints/index.ts +0 -5
  429. package/src/blueprints/thread-blueprint.ts +0 -37
  430. package/src/calls/call-manager.ts +0 -270
  431. package/src/calls/call-swarm-synchronizer.ts +0 -350
  432. package/src/calls/index.ts +0 -10
  433. package/src/calls/media-manager.ts +0 -378
  434. package/src/calls/speaking-monitor.ts +0 -85
  435. package/src/calls/types.ts +0 -74
  436. package/src/calls/util/audio.ts +0 -58
  437. package/src/calls/util/calls-service.ts +0 -580
  438. package/src/calls/util/history-cache.ts +0 -27
  439. package/src/calls/util/index.ts +0 -8
  440. package/src/calls/util/media.ts +0 -52
  441. package/src/calls/util/stub-media-streams.ts +0 -127
  442. package/src/calls/util/task-scheduling.ts +0 -92
  443. package/src/calls-service.stories.tsx +0 -230
  444. package/src/capabilities/blueprint-definition.ts +0 -17
  445. package/src/capabilities/call-manager.ts +0 -27
  446. package/src/capabilities/markdown.ts +0 -82
  447. package/src/capabilities/react-root.tsx +0 -20
  448. package/src/capabilities/settings.ts +0 -35
  449. package/src/capabilities/state.ts +0 -22
  450. package/src/capabilities/undo-mappings.ts +0 -46
  451. package/src/components/Call/Call.tsx +0 -93
  452. package/src/components/Call/Toolbar.tsx +0 -199
  453. package/src/components/Call/index.ts +0 -6
  454. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +0 -93
  455. package/src/components/CommentsPanel/CommentsPanel.tsx +0 -71
  456. package/src/components/CommentsPanel/CommentsThread.tsx +0 -172
  457. package/src/components/CommentsPanel/index.ts +0 -6
  458. package/src/components/Lobby/Lobby.tsx +0 -122
  459. package/src/components/Lobby/index.ts +0 -5
  460. package/src/components/Media/AudioStream.tsx +0 -67
  461. package/src/components/Media/VideoObject.stories.tsx +0 -59
  462. package/src/components/Media/VideoObject.tsx +0 -58
  463. package/src/components/Media/index.ts +0 -6
  464. package/src/components/MessagePanel/MessagePanel.tsx +0 -222
  465. package/src/components/MessagePanel/index.ts +0 -5
  466. package/src/components/Participant/Participant.tsx +0 -77
  467. package/src/components/Participant/ParticipantGrid.tsx +0 -88
  468. package/src/components/Participant/index.ts +0 -6
  469. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -157
  470. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
  471. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
  472. package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -53
  473. package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
  474. package/src/components/ResponsiveGrid/index.ts +0 -7
  475. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +0 -31
  476. package/src/components/ThreadSettings/ThreadSettings.tsx +0 -20
  477. package/src/components/ThreadSettings/index.ts +0 -5
  478. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
  479. package/src/containers/CallDebugPanel/index.ts +0 -5
  480. package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
  481. package/src/containers/CallSidebar/index.ts +0 -5
  482. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +0 -61
  483. package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
  484. package/src/containers/ChannelContainer/index.ts +0 -5
  485. package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
  486. package/src/containers/ChatContainer/index.ts +0 -8
  487. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +0 -217
  488. package/src/containers/ThreadCompanion/index.ts +0 -5
  489. package/src/extensions/command.ts +0 -36
  490. package/src/extensions/index.ts +0 -6
  491. package/src/extensions/threads.ts +0 -171
  492. package/src/hooks/analytics.ts +0 -41
  493. package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
  494. package/src/hooks/useDebugMode.ts +0 -25
  495. package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
  496. package/src/hooks/useVideoStreamTrack.tsx +0 -36
  497. package/src/operations/add-message.ts +0 -81
  498. package/src/operations/create-channel-thread.ts +0 -26
  499. package/src/operations/create-proposals.ts +0 -49
  500. package/src/operations/create.ts +0 -48
  501. package/src/operations/definitions.ts +0 -177
  502. package/src/operations/delete-message.ts +0 -53
  503. package/src/operations/delete.ts +0 -63
  504. package/src/operations/on-create-space.ts +0 -27
  505. package/src/operations/restore-message.ts +0 -38
  506. package/src/operations/restore.ts +0 -38
  507. package/src/operations/select.ts +0 -24
  508. package/src/operations/toggle-resolved.ts +0 -41
  509. package/src/testing/data.ts +0 -49
  510. package/src/testing/index.ts +0 -5
  511. package/src/testing/stories.ts +0 -51
  512. package/src/types/Channel.ts +0 -37
  513. package/src/types/Settings.ts +0 -10
  514. package/src/types/capabilities.ts +0 -36
  515. package/src/types/types.ts +0 -24
  516. package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
  517. package/src/typings.d.ts +0 -8
  518. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  519. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  520. /package/dist/lib/{browser/types → neutral/hooks}/index.mjs.map +0 -0
  521. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  522. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/calls/call-manager.ts", "../../../src/calls/call-swarm-synchronizer.ts", "../../../src/calls/types.ts", "../../../src/calls/media-manager.ts", "../../../src/calls/speaking-monitor.ts", "../../../src/calls/util/audio.ts", "../../../src/calls/util/calls-service.ts", "../../../src/calls/util/history-cache.ts", "../../../src/calls/util/task-scheduling.ts", "../../../src/calls/util/media.ts", "../../../src/calls/util/stub-media-streams.ts", "../../../src/hooks/analytics.ts", "../../../src/hooks/useBlackCanvasStreamTrack.tsx", "../../../src/hooks/useDebugMode.ts", "../../../src/hooks/useInaudibleAudioStreamTrack.tsx", "../../../src/hooks/useStatus.ts", "../../../src/hooks/useVideoStreamTrack.tsx", "../../../src/meta.ts", "../../../src/ThreadPlugin.tsx", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom-react';\n\nimport { Event, synchronized } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { type Tracks } from '@dxos/protocols/proto/dxos/edge/calls';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type CallState, CallSwarmSynchronizer } from './call-swarm-synchronizer';\nimport { MediaManager, type MediaState } from './media-manager';\nimport { type ActivityState, CALLS_URL, type EncodedTrackName, TrackNameCodec, type UserState } from './types';\n\nexport type GlobalState = {\n call: CallState;\n media: MediaState;\n};\n\n/**\n * Top level manager for call state.\n */\nexport class CallManager extends Resource {\n public readonly callStateUpdated = new Event<CallState>();\n // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.\n public readonly mediaStateUpdated = new Event<[MediaState, boolean]>();\n public readonly left = new Event<string>();\n\n /**\n * Atom-based state. Updated via `_updateState()`.\n * CAUTION: Do not change directly.\n */\n private readonly _stateAtom = Atom.make<GlobalState>({\n call: {},\n media: { pulledAudioTracks: {}, pulledVideoStreams: {} },\n });\n\n // Derived atoms for reactive subscriptions.\n private readonly _roomIdAtom = Atom.make((get) => get(this._stateAtom).call.roomId);\n private readonly _raisedHandAtom = Atom.make((get) => get(this._stateAtom).call.raisedHand ?? false);\n private readonly _speakingAtom = Atom.make((get) => get(this._stateAtom).call.speaking ?? false);\n private readonly _joinedAtom = Atom.make((get) => get(this._stateAtom).call.joined ?? false);\n private readonly _selfAtom = Atom.make((get) => get(this._stateAtom).call.self ?? {});\n private readonly _tracksAtom = Atom.make((get) => get(this._stateAtom).call.tracks ?? {});\n private readonly _usersAtom = Atom.make((get) => get(this._stateAtom).call.users ?? []);\n private readonly _mediaAtom = Atom.make((get) => get(this._stateAtom).media);\n private readonly _audioTracksToPlayAtom = Atom.make((get) => {\n const state = get(this._stateAtom);\n return (state.call.users ?? [])\n .map((user: UserState) => (user.tracks?.audioEnabled ? user.tracks?.audio : undefined))\n .filter(isNonNullable)\n .map((track: string) => state.media.pulledAudioTracks[track as EncodedTrackName]?.track)\n .filter(isNonNullable);\n });\n private readonly _videoStreamAtomFamily = Atom.family<EncodedTrackName, Atom.Atom<MediaStream | undefined>>((name) =>\n Atom.make((get) => get(this._stateAtom).media.pulledVideoStreams[name]?.stream),\n );\n private readonly _activityAtomFamily = Atom.family<string, Atom.Atom<ActivityState | undefined>>((key) =>\n Atom.make((get) => get(this._stateAtom).call.activities?.[key]),\n );\n\n private readonly _swarmSynchronizer: CallSwarmSynchronizer;\n private readonly _mediaManager: MediaManager;\n\n //\n // Derived atoms for reactive UI subscriptions.\n //\n\n /** Derived atom for roomId. */\n get roomIdAtom(): Atom.Atom<string | undefined> {\n return this._roomIdAtom;\n }\n\n /** Derived atom for raisedHand. */\n get raisedHandAtom(): Atom.Atom<boolean> {\n return this._raisedHandAtom;\n }\n\n /** Derived atom for speaking. */\n get speakingAtom(): Atom.Atom<boolean> {\n return this._speakingAtom;\n }\n\n /** Derived atom for joined. */\n get joinedAtom(): Atom.Atom<boolean> {\n return this._joinedAtom;\n }\n\n /** Derived atom for self. */\n get selfAtom(): Atom.Atom<UserState> {\n return this._selfAtom;\n }\n\n /** Derived atom for tracks. */\n get tracksAtom(): Atom.Atom<Tracks> {\n return this._tracksAtom;\n }\n\n /** Derived atom for users. */\n get usersAtom(): Atom.Atom<UserState[]> {\n return this._usersAtom;\n }\n\n /** Derived atom for media. */\n get mediaAtom(): Atom.Atom<MediaState> {\n return this._mediaAtom;\n }\n\n /** Derived atom for audioTracksToPlay. */\n get audioTracksToPlayAtom(): Atom.Atom<MediaStreamTrack[]> {\n return this._audioTracksToPlayAtom;\n }\n\n /** Returns the full state atom for reactive subscriptions. */\n get stateAtom(): Atom.Atom<GlobalState> {\n return this._stateAtom;\n }\n\n /** Returns a derived atom for a video stream by name. */\n videoStreamAtom(name: EncodedTrackName): Atom.Atom<MediaStream | undefined> {\n return this._videoStreamAtomFamily(name);\n }\n\n /** Returns a derived atom for an activity by key. */\n activityAtom(key: string): Atom.Atom<ActivityState | undefined> {\n return this._activityAtomFamily(key);\n }\n\n setRoomId(roomId: string): void {\n this._swarmSynchronizer._setRoomId(roomId);\n }\n\n setSpeaking(speaking: boolean): void {\n this._swarmSynchronizer.setSpeaking(speaking);\n }\n\n setRaisedHand(raisedHand: boolean): void {\n this._swarmSynchronizer.setRaisedHand(raisedHand);\n }\n\n setActivity(key: string, payload: ActivityState['payload']): void {\n this._swarmSynchronizer.setActivity(key, payload);\n }\n\n turnAudioOn(): Promise<void> {\n return this._mediaManager.turnAudioOn();\n }\n\n turnAudioOff(): Promise<void> {\n return this._mediaManager.turnAudioOff();\n }\n\n turnVideoOn(): Promise<void> {\n return this._mediaManager.turnVideoOn();\n }\n\n turnVideoOff(): Promise<void> {\n return this._mediaManager.turnVideoOff();\n }\n\n turnScreenshareOn(): Promise<void> {\n return this._mediaManager.turnScreenshareOn();\n }\n\n turnScreenshareOff(): Promise<void> {\n return this._mediaManager.turnScreenshareOff();\n }\n\n // TODO(burdon): Can this be mocked?\n constructor(\n private readonly _client: Client,\n private readonly _registry: Registry.Registry,\n ) {\n super();\n this._client.config.getOrThrow('runtime.services.edge.url');\n const networkService = this._client.services.services.NetworkService;\n invariant(networkService, 'network service not found');\n this._swarmSynchronizer = new CallSwarmSynchronizer({ networkService });\n this._mediaManager = new MediaManager();\n }\n\n protected override async _open(): Promise<void> {\n await this._mediaManager.open();\n await this._swarmSynchronizer.open();\n const subscription = this._client.halo.identity.subscribe((identity) => {\n if (identity) {\n this._swarmSynchronizer._setIdentity(identity);\n }\n if (this._client.halo.device) {\n this._swarmSynchronizer._setDevice(this._client.halo.device);\n }\n });\n this._ctx.onDispose(() => subscription.unsubscribe());\n\n this._swarmSynchronizer.stateUpdated.on(this._ctx, (state) => this._onCallStateUpdated(state));\n this._mediaManager.stateUpdated.on(this._ctx, (state) => this._onMediaStateUpdated(state));\n }\n\n protected override async _close(): Promise<void> {\n await this._swarmSynchronizer.leave();\n await this._swarmSynchronizer.close();\n await this._mediaManager.close();\n }\n\n async peek(roomId: string): Promise<number> {\n const peers = await this._swarmSynchronizer.querySwarm(roomId);\n return peers.length;\n }\n\n // TODO(mykola): Reconcile with _swarmSynchronizer.state.joined.\n @synchronized\n async join(): Promise<void> {\n this._swarmSynchronizer.setJoined(true);\n await this._swarmSynchronizer.join();\n await this._mediaManager.join({\n iceServers: this._client.config.get('runtime.services.ice'),\n apiBase: `${CALLS_URL}/api/calls`,\n });\n }\n\n @synchronized\n async leave(): Promise<void> {\n this._swarmSynchronizer.setJoined(false);\n await this._swarmSynchronizer.leave();\n await this._mediaManager.leave();\n const roomId = this._registry.get(this._roomIdAtom);\n roomId && this.left.emit(roomId);\n }\n\n private _onCallStateUpdated(state: CallState): void {\n const tracksToPull = state.users\n ?.filter((user) => user.joined && user.id !== state.self!.id)\n ?.flatMap((user) => [user.tracks?.video, user.tracks?.audio, user.tracks?.screenshare])\n .filter(isNonNullable);\n this._mediaManager._schedulePullTracks(tracksToPull as EncodedTrackName[]);\n\n this.callStateUpdated.emit(state);\n this._updateState();\n }\n\n private _onMediaStateUpdated(state: MediaState): void {\n this._swarmSynchronizer.setTracks({\n video: state.pushedVideoTrack ? TrackNameCodec.encode(state.pushedVideoTrack) : undefined,\n audio: state.pushedAudioTrack ? TrackNameCodec.encode(state.pushedAudioTrack) : undefined,\n screenshare: state.pushedScreenshareTrack ? TrackNameCodec.encode(state.pushedScreenshareTrack) : undefined,\n videoEnabled: state.videoEnabled,\n audioEnabled: state.audioEnabled,\n screenshareEnabled: state.screenshareEnabled,\n });\n\n const isSpeaking = this._mediaManager.isSpeaking ?? false;\n this._swarmSynchronizer.setSpeaking(isSpeaking);\n\n this.mediaStateUpdated.emit([state, isSpeaking]);\n this._updateState();\n }\n\n /**\n * Only this method is allowed to change state.\n */\n private _updateState(): void {\n this._registry.set(this._stateAtom, {\n call: this._swarmSynchronizer._getState(),\n media: this._mediaManager._getState(),\n });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport md5Hex from 'md5-hex';\n\nimport { DeferredTask, Event, scheduleTaskInterval, synchronized } from '@dxos/async';\nimport { type Identity } from '@dxos/client/halo';\nimport { Context, Resource } from '@dxos/context';\nimport { generateName } from '@dxos/display-name';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { buf } from '@dxos/protocols/buf';\nimport { ActivitySchema } from '@dxos/protocols/buf/dxos/edge/calls_pb';\nimport { type Device, type NetworkService } from '@dxos/protocols/proto/dxos/client/services';\nimport { ConnectionState, type SwarmResponse } from '@dxos/protocols/proto/dxos/edge/messenger';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type ActivityState, type UserState, codec } from './types';\n\nexport type CallState = {\n /**\n * Room id.\n */\n roomId?: string;\n\n /**\n * All users states in the swarm.\n */\n users?: UserState[];\n\n /**\n * Self state inside swarm.\n */\n self?: UserState;\n\n /**\n * Swarm synchronized CRDT transcription. Last write wins.\n */\n activities?: Record<string, ActivityState>;\n\n raisedHand?: boolean;\n speaking?: boolean;\n joined?: boolean;\n\n /**\n * Tracks pushed by self to calls service.\n */\n tracks?: UserState['tracks'];\n};\n\nexport type CallSwarmSynchronizerProps = { networkService: NetworkService };\n\n/**\n * Period for peer to reconnect to the call swarm gracefully if connection was lost abruptly.\n */\nconst DISCONNECTED_ABRUPT_TIMEOUT = 10_000; // [ms]\n\n/**\n * Sends and receives state to/from Swarm network.\n */\nexport class CallSwarmSynchronizer extends Resource {\n public readonly stateUpdated = new Event<CallState>();\n\n private readonly _state: CallState = { activities: {} };\n private readonly _networkService: NetworkService;\n private _lastSwarmEvent?: SwarmResponse = undefined;\n private _reconcileSwarmStateTask?: DeferredTask = undefined;\n\n private _identityKey?: string = undefined;\n private _deviceKey?: string = undefined;\n private _displayName?: string = undefined;\n\n private _swarmCtx?: Context = undefined;\n\n private _sendStateTask?: DeferredTask = undefined;\n\n constructor({ networkService }: CallSwarmSynchronizerProps) {\n super();\n this._networkService = networkService;\n }\n\n /**\n * @internal\n */\n _getState(): CallState {\n return this._state;\n }\n\n setRaisedHand(raisedHand: boolean): void {\n if (this._state.raisedHand === raisedHand) {\n return;\n }\n\n this._state.raisedHand = raisedHand;\n this._notifyAndSchedule();\n }\n\n setSpeaking(speaking: boolean): void {\n if (this._state.speaking === speaking) {\n return;\n }\n\n this._state.speaking = speaking;\n this._notifyAndSchedule();\n }\n\n setJoined(joined: boolean): void {\n if (this._state.joined === joined) {\n return;\n }\n\n this._state.joined = joined;\n this._notifyAndSchedule();\n }\n\n setTracks(tracks: UserState['tracks']): void {\n this._state.tracks = { ...this._state.tracks, ...tracks };\n this._notifyAndSchedule();\n }\n\n setActivity(key: string, payload: ActivityState['payload']): void {\n const lamportTimestamp = LamportTimestampCrdt.increment(\n this._state.activities?.[key]?.lamportTimestamp ?? { id: this._deviceKey },\n );\n this._state.activities![key] = { lamportTimestamp, payload };\n\n this._notifyAndSchedule();\n }\n\n /**\n * @internal\n */\n _setIdentity(identity: Identity): void {\n this._identityKey = identity.identityKey.toHex();\n this._displayName = identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n }\n\n /**\n * @internal\n */\n _setDevice(device: Device): void {\n this._deviceKey = device.deviceKey.toHex();\n }\n\n /**\n * @internal\n */\n _setRoomId(roomId?: string): void {\n if (this._swarmCtx) {\n log.verbose('joined to a different room', { roomId });\n return;\n }\n\n this._state.roomId = roomId;\n }\n\n protected override async _open(): Promise<void> {\n this._sendStateTask = new DeferredTask(this._ctx, async () => {\n await this._sendState();\n });\n\n this._reconcileSwarmStateTask = new DeferredTask(this._ctx, async () => {\n await this._reconcileSwarmState();\n });\n }\n\n protected override async _close(): Promise<void> {\n this._sendStateTask = undefined;\n this._reconcileSwarmStateTask = undefined;\n }\n\n @synchronized\n async join(): Promise<void> {\n invariant(this._state.roomId);\n invariant(!this._swarmCtx, 'Already joined');\n\n this._swarmCtx = new Context();\n const topic = getTopic(this._state.roomId);\n log('joining swarm', { topic, peer: { identityKey: this._identityKey, peerKey: this._deviceKey } });\n const stream = this._networkService.subscribeSwarmState({ topic });\n stream.subscribe((event) => this._processSwarmEvent(event));\n\n const cleanup = () => {\n void stream.close();\n if (topic && this._identityKey && this._deviceKey) {\n log('leaving swarm', { topic, peer: { identityKey: this._identityKey, peerKey: this._deviceKey } });\n void this._networkService\n .leaveSwarm({\n topic,\n peer: { identityKey: this._identityKey, peerKey: this._deviceKey },\n })\n .catch((err) => log.catch(err));\n }\n window.removeEventListener('beforeunload', cleanup);\n };\n window.addEventListener('beforeunload', cleanup);\n this._swarmCtx.onDispose(cleanup);\n\n this._notifyAndSchedule();\n }\n\n @synchronized\n async leave(): Promise<void> {\n if (!this._swarmCtx) {\n return;\n }\n\n await this._swarmCtx.dispose();\n this._swarmCtx = undefined;\n\n this._state.users = undefined;\n this._state.self = undefined;\n }\n\n async querySwarm(roomId: string) {\n const topic = getTopic(roomId);\n const swarm = await this._networkService.querySwarm({ topic });\n return swarm.peers ?? [];\n }\n\n /**\n * Notify and schedule send state task.\n */\n private _notifyAndSchedule(): void {\n this.stateUpdated.emit(this._state);\n if (this._state.joined) {\n this._sendStateTask?.schedule();\n }\n }\n\n private async _sendState(): Promise<void> {\n if (!this._state.roomId || !this._identityKey || !this._deviceKey || !this._state.joined) {\n return;\n }\n\n const state: UserState = {\n ...this._state,\n id: this._deviceKey,\n name: this._displayName,\n activities: this._state.activities\n ? Object.fromEntries(\n Object.entries(this._state.activities).map(([key, activity]) => [\n key,\n buf.create(ActivitySchema, activity),\n ]),\n )\n : {},\n };\n\n await this._networkService.joinSwarm({\n topic: getTopic(this._state.roomId),\n peer: {\n identityKey: this._identityKey,\n peerKey: this._deviceKey,\n state: codec.encode(state),\n },\n });\n }\n\n private _processSwarmEvent(swarmEvent: SwarmResponse): void {\n if (!this._state.joined) {\n return;\n }\n\n this._lastSwarmEvent = swarmEvent;\n this._reconcileSwarmStateTask!.schedule();\n }\n\n private async _reconcileSwarmState(): Promise<void> {\n const swarmEvent = this._lastSwarmEvent;\n invariant(swarmEvent);\n // We include inactive peers that were disconnected abruptly and have not yet reconnected to not drop them from call.\n // Websocket connection could be unstable and we include graceful period for peers to reconnect.\n const peers = [\n ...(swarmEvent.peers ?? []),\n ...(swarmEvent.inactivePeers ?? []).filter(\n ({ disconnected, connectionState }) =>\n connectionState === ConnectionState.DISCONNECTED_ABRUPT &&\n disconnected &&\n disconnected > Date.now() - DISCONNECTED_ABRUPT_TIMEOUT,\n ),\n ].sort((peer1, peer2) => peer1.peerKey.localeCompare(peer2.peerKey));\n const users = peers\n .map((peer) => {\n try {\n return codec.decode(peer.state!);\n } catch (error) {\n log.error('error decoding peer state', { error, peer });\n return undefined;\n }\n })\n .filter(isNonNullable);\n this._state.users = users;\n this._state.self = users.find((user) => user.id === this._deviceKey);\n log('reconciling swarm state', { users });\n if (users.length === 0) {\n return;\n }\n\n const activityKeys = new Set<string>(users.flatMap((user) => Object.keys(user.activities)));\n [...activityKeys].forEach((key) => {\n const activities = users.map((user) => user.activities?.[key]).filter(isNonNullable);\n const lastActivity = LamportTimestampCrdt.getLastState(activities);\n if (\n lastActivity &&\n lastActivity.lamportTimestamp!.version! > (this._state.activities![key]?.lamportTimestamp?.version ?? 0)\n ) {\n this._state.activities![key] = lastActivity;\n }\n });\n this.stateUpdated.emit(this._state);\n\n // Schedule next reconcile if there are inactive peer to drop them after timeout.\n if (peers.some((peer) => peer.connectionState !== ConnectionState.CONNECTED)) {\n scheduleTaskInterval(\n this._ctx,\n async () => this._reconcileSwarmStateTask!.schedule(),\n Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1000),\n );\n }\n }\n}\n\ntype LamportTimestamp = ActivityState['lamportTimestamp'];\n\n// TODO(mykola): Factor out.\nclass LamportTimestampCrdt {\n static getLastState<T extends { lamportTimestamp?: LamportTimestamp }>(states: T[]): T | undefined {\n const maxTimestamp = Math.max(...states.map((state) => state.lamportTimestamp?.version ?? 0));\n const sortedStates = states\n .filter(\n (state) =>\n state.lamportTimestamp && state.lamportTimestamp.version === maxTimestamp && state.lamportTimestamp.id,\n )\n .sort((a, b) => a.lamportTimestamp!.id!.localeCompare(b.lamportTimestamp!.id!));\n return sortedStates[0];\n }\n\n static increment(timestamp: LamportTimestamp): LamportTimestamp {\n return {\n ...(timestamp ?? {}),\n version: (timestamp?.version ?? 0) + 1,\n };\n }\n}\n\n// TODO(mykola): Delete once we refactor swarm to accept string as topic.\nconst getTopic = (roomId: string): PublicKey => PublicKey.fromHex(md5Hex(roomId));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { buf } from '@dxos/protocols/buf';\nimport {\n type ActivitySchema,\n type UserState as UserStateProto,\n UserStateSchema,\n} from '@dxos/protocols/buf/dxos/edge/calls_pb';\n\n/**\n * Endpoint to the calls service.\n */\nexport const CALLS_URL = 'https://calls-service.dxos.workers.dev';\n\nexport type UserState = buf.MessageInitShape<typeof UserStateSchema>;\n\nexport type ActivityState = buf.MessageInitShape<typeof ActivitySchema>;\n\nexport const codec = {\n encode: (message: UserState): Uint8Array => {\n return buf.toBinary(UserStateSchema, buf.create(UserStateSchema, message));\n },\n decode: (message: Uint8Array): UserStateProto => {\n return buf.fromBinary(UserStateSchema, message);\n },\n};\n\nexport type TrackObject = {\n location?: 'local' | 'remote';\n trackName?: string;\n sessionId?: string;\n mid?: string | null;\n};\n\nexport type SessionDescription = {\n type: 'offer' | 'answer';\n sdp: string;\n};\n\nexport interface ErrorResponse {\n errorCode?: string;\n errorDescription?: string;\n}\n\nexport interface SessionResponse extends ErrorResponse {\n sessionId: string;\n sessionDescription: SessionDescription;\n}\n\nexport interface TracksResponse extends ErrorResponse {\n sessionDescription: SessionDescription;\n requiresImmediateRenegotiation: boolean;\n tracks?: (TrackObject & ErrorResponse)[];\n}\n\nexport interface RenegotiationResponse extends ErrorResponse {}\n\nexport type EncodedTrackName = string & { __brand: 'EncodedTrackName' };\n\nexport const TrackNameCodec = {\n encode: (trackData: TrackObject): EncodedTrackName => {\n invariant(trackData.sessionId);\n invariant(trackData.trackName);\n invariant(trackData.mid);\n return (trackData.sessionId + '/' + trackData.trackName + '/' + trackData.mid) as EncodedTrackName;\n },\n decode: (name: EncodedTrackName): TrackObject => {\n const [sessionId, trackName, mid] = name.split('/');\n return { sessionId, trackName, location: 'remote', mid };\n },\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { DeferredTask, Event, sleep, synchronized } from '@dxos/async';\nimport { type Context, Resource, cancelWithContext } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { SpeakingMonitor } from './speaking-monitor';\nimport { type EncodedTrackName, TrackNameCodec, type TrackObject } from './types';\nimport {\n type CallsServiceConfig,\n CallsServicePeer,\n createBlackCanvasStreamTrack,\n createInaudibleAudioStreamTrack,\n getScreenshare,\n getUserMediaTrack,\n} from './util';\n\nexport type MediaState = {\n audioDeviceId?: string;\n audioEnabled?: boolean;\n audioTrack?: MediaStreamTrack;\n\n videoDeviceId?: string;\n videoEnabled?: boolean;\n videoTrack?: MediaStreamTrack;\n videoStream?: MediaStream;\n\n screenshareEnabled?: boolean;\n screenshareTrack?: MediaStreamTrack;\n screenshareVideoStream?: MediaStream;\n\n pushedVideoTrack?: TrackObject;\n pushedAudioTrack?: TrackObject;\n pushedScreenshareTrack?: TrackObject;\n peer?: CallsServicePeer;\n\n pulledAudioTracks: Record<EncodedTrackName, { track: MediaStreamTrack; ctx: Context }>;\n /**\n * Includes video feeds and screenshare feeds of other participants.\n */\n pulledVideoStreams: Record<EncodedTrackName, { stream: MediaStream; ctx: Context }>;\n};\n\n// TOOD(burdon): Hard coded.\nconst VIDEO_WIDTH = 1280;\nconst VIDEO_HEIGHT = 720;\nconst MAX_WEB_CAM_FRAMERATE = 24;\nconst MAX_WEB_CAM_BITRATE = 120_0000;\nconst RETRY_INTERVAL = 100;\n\nexport type MediaManagerProps = {\n serviceConfig: CallsServiceConfig;\n};\n\nconst USE_INAUDIBLE_AUDIO = true;\n\nexport class MediaManager extends Resource {\n public readonly stateUpdated = new Event<MediaState>();\n\n private readonly _state: MediaState = {\n pulledVideoStreams: {},\n pulledAudioTracks: {},\n };\n\n private _speakingMonitor?: SpeakingMonitor = undefined;\n private _trackToReconcile: EncodedTrackName[] = [];\n private _blackCanvasStreamTrack?: MediaStreamTrack = undefined;\n private _inaudibleAudioStreamTrack?: MediaStreamTrack = undefined;\n private _pushTracksTask?: DeferredTask = undefined;\n private _pullTracksTask?: DeferredTask = undefined;\n\n get isSpeaking() {\n return this._speakingMonitor?.isSpeaking;\n }\n\n /**\n * @internal\n */\n _getState(): MediaState {\n return this._state;\n }\n\n protected override async _open(): Promise<void> {\n this._blackCanvasStreamTrack = await createBlackCanvasStreamTrack({\n ctx: this._ctx,\n width: VIDEO_WIDTH,\n height: VIDEO_HEIGHT,\n });\n\n this._state.videoTrack = this._blackCanvasStreamTrack;\n this._state.videoStream = new MediaStream();\n this._state.videoStream.addTrack(this._state.videoTrack);\n\n if (USE_INAUDIBLE_AUDIO) {\n this._inaudibleAudioStreamTrack = await createInaudibleAudioStreamTrack({ ctx: this._ctx });\n this._state.audioTrack = this._inaudibleAudioStreamTrack;\n }\n\n this._pushTracksTask = new DeferredTask(this._ctx, async () => {\n await this._pushTracks();\n });\n this._pullTracksTask = new DeferredTask(this._ctx, async () => {\n await this._reconcilePulledMedia();\n });\n }\n\n protected override async _close(): Promise<void> {\n void this._speakingMonitor?.close();\n this._state.videoTrack && this._state.videoStream?.removeTrack(this._state.videoTrack);\n this._state.audioTrack?.stop();\n this._state.videoTrack?.stop();\n this._state.screenshareTrack?.stop();\n this._pushTracksTask = undefined;\n this._pullTracksTask = undefined;\n }\n\n @synchronized\n async join(serviceConfig: CallsServiceConfig): Promise<void> {\n this._state.peer = new CallsServicePeer(serviceConfig);\n await this._state.peer!.open();\n this._pushTracksTask!.schedule();\n }\n\n @synchronized\n async leave(): Promise<void> {\n await Promise.all(Object.values(this._state.pulledAudioTracks).map(({ ctx }) => ctx.dispose()));\n await Promise.all(Object.values(this._state.pulledVideoStreams).map(({ ctx }) => ctx.dispose()));\n this._trackToReconcile = [];\n await this._state.peer?.close();\n this._state.peer = undefined;\n this._state.pushedVideoTrack = undefined;\n this._state.pushedAudioTrack = undefined;\n this._state.pushedScreenshareTrack = undefined;\n this._state.pulledAudioTracks = {};\n this._state.pulledVideoStreams = {};\n }\n\n async turnVideoOn(): Promise<void> {\n this._state.videoStream!.removeTrack(this._state.videoTrack!);\n this._state.videoTrack = await getUserMediaTrack('videoinput', { width: VIDEO_WIDTH, height: VIDEO_HEIGHT });\n this._state.videoStream!.addTrack(this._state.videoTrack);\n\n this._state.videoEnabled = true;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n async turnVideoOff(): Promise<void> {\n if (this._state.videoTrack !== this._blackCanvasStreamTrack) {\n this._state.videoStream!.removeTrack(this._state.videoTrack!);\n this._state.videoTrack?.stop();\n this._state.videoTrack = this._blackCanvasStreamTrack;\n this._state.videoStream!.addTrack(this._state.videoTrack!);\n }\n\n this._state.videoEnabled = false;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n // TODO(mykola): Change to `setAudioEnabled(enabled: boolean)`.\n async turnAudioOn(): Promise<void> {\n void this._speakingMonitor?.close();\n this._state.audioEnabled = true;\n this._state.audioTrack = await getUserMediaTrack('audioinput', {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n sampleRate: 16_000,\n });\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n this._speakingMonitor = new SpeakingMonitor(this._state.audioTrack!);\n this._speakingMonitor.speakingChanged.on(this._ctx, () => this.stateUpdated.emit(this._state));\n void this._speakingMonitor.open();\n }\n\n async turnAudioOff(): Promise<void> {\n void this._speakingMonitor?.close();\n this._speakingMonitor = undefined;\n this._state.audioEnabled = false;\n if (USE_INAUDIBLE_AUDIO && this._state.audioTrack !== this._inaudibleAudioStreamTrack) {\n this._state.audioTrack?.stop();\n this._state.audioTrack = this._inaudibleAudioStreamTrack;\n } else {\n this._state.audioTrack?.stop();\n this._state.audioTrack = undefined;\n }\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n async turnScreenshareOn(): Promise<void> {\n const ms = await getScreenshare({ contentHint: 'text' });\n this._state.screenshareVideoStream = ms;\n this._state.screenshareTrack = ms.getVideoTracks()[0];\n this._state.screenshareEnabled = true;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n async turnScreenshareOff(): Promise<void> {\n this._state.screenshareEnabled = false;\n this._state.screenshareTrack?.stop();\n this._state.screenshareTrack = undefined;\n this.stateUpdated.emit(this._state);\n this._pushTracksTask!.schedule();\n }\n\n /**\n * @internal\n */\n _schedulePullTracks(tracks?: EncodedTrackName[]): void {\n if (\n !tracks ||\n (this._trackToReconcile.every((name) => tracks.includes(name)) && this._trackToReconcile.length === tracks.length)\n ) {\n return;\n }\n\n this._trackToReconcile = tracks;\n this._pullTracksTask!.schedule();\n }\n\n private async _reconcilePulledMedia(): Promise<void> {\n log('reconciling tracks');\n // TODO(mykola): Currently cloudflare fails if you try to pull track immediately after pushing it.\n // Add retry logic, remove sleep.\n // Wait for cloudflare to process the track.\n await cancelWithContext(this._ctx, sleep(800));\n const trackNames = this._trackToReconcile;\n const tracksToPull = trackNames.filter(\n (name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name],\n );\n\n const audioTracksToClose = Object.entries(this._state.pulledAudioTracks).filter(\n ([key]) => !trackNames.some((name) => name === key),\n );\n\n const videoStreamsToClose = Object.entries(this._state.pulledVideoStreams).filter(\n ([key]) => !trackNames.some((name) => name === key),\n );\n\n log('reconciling tracks', {\n trackNames,\n tracksToPull,\n videoStreamsToClose,\n audioTracksToClose,\n currentAudioTracks: Object.keys(this._state.pulledAudioTracks),\n currentVideoStreams: Object.keys(this._state.pulledVideoStreams),\n });\n\n // Pull new tracks.\n const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));\n\n // Close old tracks.\n await Promise.all([...audioTracksToClose, ...videoStreamsToClose].map(([_, { ctx }]) => ctx.dispose()));\n\n log('reconciled tracks', {\n currentAudioTracks: Object.keys(this._state.pulledAudioTracks),\n currentVideoStreams: Object.keys(this._state.pulledVideoStreams),\n });\n\n this.stateUpdated.emit(this._state);\n if (pullResults.some(({ shouldRetry }) => shouldRetry)) {\n await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));\n log.info('retrying pull tracks', { tracksToPull });\n invariant(this._pullTracksTask);\n this._pullTracksTask.schedule();\n }\n }\n\n private async _pushTracks(): Promise<void> {\n if (!this._state.peer?.isOpen) {\n return;\n }\n\n let updated = false;\n const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([\n this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [\n { maxFramerate: MAX_WEB_CAM_FRAMERATE, maxBitrate: MAX_WEB_CAM_BITRATE },\n ]),\n this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [{ networkPriority: 'high' }]),\n this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack),\n ]);\n\n if (pushVideoResult.track !== this._state.pushedVideoTrack) {\n this._state.pushedVideoTrack = pushVideoResult.track;\n updated = true;\n }\n if (pushAudioResult.track !== this._state.pushedAudioTrack) {\n this._state.pushedAudioTrack = pushAudioResult.track;\n updated = true;\n }\n if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {\n this._state.pushedScreenshareTrack = pushScreenshareResult.track;\n updated = true;\n }\n\n const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;\n if (updated) {\n this.stateUpdated.emit(this._state);\n }\n\n if (shouldRetry) {\n await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));\n log.info('retrying push tracks', { pushVideoResult, pushAudioResult, pushScreenshareResult });\n invariant(this._pushTracksTask);\n this._pushTracksTask.schedule();\n }\n }\n\n private async _pullTrack(name: EncodedTrackName): Promise<{ shouldRetry: boolean }> {\n const ctx = this._ctx.derive();\n try {\n const trackData = TrackNameCodec.decode(name);\n // We need to set mid here to `undefined`, because mid is peer specific.\n const track = await this._state.peer!.pullTrack({ trackData: { ...trackData, mid: undefined }, ctx });\n if (track?.readyState === 'ended') {\n throw new Error('Pulled track ended immediately');\n }\n\n switch (track?.kind) {\n case 'audio': {\n this._state.pulledAudioTracks[name] = { track, ctx };\n ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);\n return { shouldRetry: false };\n }\n case 'video': {\n const mediaStream = new MediaStream();\n mediaStream.addTrack(track);\n this._state.pulledVideoStreams[name] = { stream: mediaStream, ctx };\n ctx.onDispose(() => {\n mediaStream.removeTrack(track);\n track.stop();\n delete this._state.pulledVideoStreams[name];\n });\n return { shouldRetry: false };\n }\n default:\n throw new Error(`Invalid track kind: ${track?.kind}`);\n }\n } catch (err) {\n log.info('failed to pull track', { err, name });\n void ctx.dispose();\n return { shouldRetry: true };\n }\n }\n\n private async _maybePushTrack(\n track?: MediaStreamTrack,\n previousTrack?: TrackObject,\n encodings?: RTCRtpEncodingParameters[],\n ): Promise<{ track?: TrackObject; shouldRetry?: boolean }> {\n if (!track && !previousTrack) {\n return { track: undefined };\n }\n\n const ctx = this._ctx.derive();\n try {\n return {\n track: await this._state.peer!.pushTrack({\n ctx,\n track: track ?? null,\n previousTrack,\n encodings,\n }),\n };\n } catch (err) {\n log.info('failed to push track', { err, track, previousTrack, encodings });\n void ctx.dispose();\n return { shouldRetry: true };\n }\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { DeferredTask, Event, sleep } from '@dxos/async';\nimport { Resource } from '@dxos/context';\n\nimport { monitorAudioLevel } from './util';\n\nconst NOT_SPEAKING_AFTER = 500; // [ms]\nconst START_SPEAKING_THRESHOLD = 0.05;\nconst CONTINUE_SPEAKING_THRESHOLD = 0.02;\nconst MIN_EVENT_INTERVAL = 100; // [ms]\n\nexport class SpeakingMonitor extends Resource {\n /**\n * Event that is emitted when the user starts or stops speaking.\n * It is debounced to prevent rapid state changes.\n */\n public readonly speakingChanged = new Event<boolean>();\n\n /**\n * Real state of the user speaking.\n */\n private _isSpeaking = false;\n private _lastEventTime = 0;\n private _deferredUpdate?: DeferredTask | undefined;\n\n constructor(private readonly _mediaStreamTrack: MediaStreamTrack) {\n super();\n }\n\n get isSpeaking(): boolean {\n return this._isSpeaking;\n }\n\n protected override async _open(): Promise<void> {\n this._deferredUpdate = new DeferredTask(this._ctx, async () => this._emitSpeakingChanged());\n\n let timeout: NodeJS.Timeout | undefined;\n const cleanup = monitorAudioLevel({\n mediaStreamTrack: this._mediaStreamTrack,\n onMeasure: (vol) => {\n // Once the user has been determined to be speaking, we want\n // to lower the threshold because speech patterns don't always\n // kick up above 0.05.\n const audioLevelAboveThreshold =\n vol > (this._isSpeaking ? CONTINUE_SPEAKING_THRESHOLD : START_SPEAKING_THRESHOLD);\n if (audioLevelAboveThreshold) {\n // User is still speaking, clear timeout & reset.\n clearTimeout(timeout);\n timeout = undefined;\n if (!this._isSpeaking) {\n this._isSpeaking = true;\n this._deferredUpdate?.schedule();\n }\n } else if (timeout === undefined) {\n // User is not speaking and timeout is not set.\n timeout = setTimeout(() => {\n this._isSpeaking = false;\n timeout = undefined;\n this._deferredUpdate?.schedule();\n }, NOT_SPEAKING_AFTER);\n }\n },\n });\n this._ctx.onDispose(() => {\n cleanup();\n clearTimeout(timeout);\n });\n }\n\n /**\n * Emits the speaking changed event with debouncing based on timing.\n */\n private async _emitSpeakingChanged(): Promise<void> {\n const timeSinceLastEvent = Date.now() - this._lastEventTime;\n const timeToNextEvent = MIN_EVENT_INTERVAL - timeSinceLastEvent;\n if (timeToNextEvent > 0) {\n await sleep(timeToNextEvent);\n }\n this._lastEventTime = Date.now();\n this.speakingChanged.emit(this._isSpeaking);\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const monitorAudioLevel = ({\n mediaStreamTrack,\n intervalMs = 1000 / 10, // 12 fps.\n onMeasure,\n}: {\n mediaStreamTrack: MediaStreamTrack;\n intervalMs?: number;\n onMeasure: (value: number) => void;\n}) => {\n let timeout = -1;\n let interval = -1;\n const audioContext = new AudioContext();\n const stream = new MediaStream();\n stream.addTrack(mediaStreamTrack);\n const mediaStreamAudioSourceNode = audioContext.createMediaStreamSource(stream);\n const analyserNode = audioContext.createAnalyser();\n mediaStreamAudioSourceNode.connect(analyserNode);\n // Since we just need a rough approximation and will be measuring\n // frequently, we want to drop this down from the default of 2048.\n analyserNode.fftSize = 32;\n\n const pcmData = new Float32Array(analyserNode.fftSize);\n let peak = 0;\n\n interval = window.setInterval(() => {\n onMeasure(peak);\n peak = 0;\n }, intervalMs);\n\n const tick = () => {\n timeout = window.setTimeout(() => {\n analyserNode.getFloatTimeDomainData(pcmData);\n let sumSquares = 0.0;\n for (const amplitude of pcmData) {\n sumSquares += amplitude * amplitude;\n }\n const current = Math.sqrt(sumSquares / pcmData.length);\n if (current > peak) {\n peak = current;\n }\n tick();\n }, intervalMs);\n };\n tick();\n\n return () => {\n mediaStreamAudioSourceNode.disconnect();\n analyserNode.disconnect();\n void audioContext.close();\n clearInterval(interval);\n clearTimeout(timeout);\n stream.removeTrack(mediaStreamTrack);\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { PersistentLifecycle, Trigger, scheduleTask } from '@dxos/async';\nimport { type Context, Resource } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport {\n type ErrorResponse,\n type RenegotiationResponse,\n type SessionResponse,\n type TrackObject,\n type TracksResponse,\n} from '../types';\nimport { HistoryCache } from './history-cache';\nimport { BulkRequestDispatcher, FIFOScheduler } from './task-scheduling';\n\nconst NETWORK_TIMEOUT = 5_000;\n\nexport type Session = {\n sessionId: string;\n peerConnection: RTCPeerConnection;\n};\n\nexport type CallsServiceConfig = {\n apiBase: string;\n apiExtraProps?: string;\n iceServers?: RTCIceServer[];\n};\n\nexport type HistoryRecord =\n | {\n endpoint: string;\n type: 'request';\n time: string;\n method: string;\n body: any;\n }\n | {\n endpoint: string;\n type: 'response';\n time: string;\n status: number;\n text?: string;\n json?: any;\n };\n\n/**\n * Client for Cloudflare Calls service.\n * API: https://developers.cloudflare.com/calls/https-api/\n * Inspired by client from https://github.com/threepointone/partyserver/tree/main/packages/partytracks\n */\n// TODO(mykola): Expose session errors.\nexport class CallsServicePeer extends Resource {\n public readonly history = new HistoryCache<HistoryRecord>(100);\n\n private readonly _persistentLifecycle = new PersistentLifecycle<Session>({\n start: () => this._startSession(),\n stop: (session) => this._stopSession(session),\n });\n\n private readonly _config: CallsServiceConfig;\n\n taskScheduler = new FIFOScheduler();\n pushTrackDispatcher = new BulkRequestDispatcher<\n {\n trackName: string;\n transceiver: RTCRtpTransceiver;\n },\n { tracks: TrackObject[] }\n >(32);\n\n pullTrackDispatcher = new BulkRequestDispatcher<\n TrackObject,\n {\n /**\n * trackName -> { resolvedTrack, mid }\n */\n trackMap: Map<string, { resolvedTrack: Promise<MediaStreamTrack>; mid: string }>;\n }\n >(32);\n\n closeTrackDispatcher = new BulkRequestDispatcher(32);\n constructor(config: CallsServiceConfig) {\n super();\n this._config = config;\n }\n\n protected override async _open(ctx: Context): Promise<void> {\n await this._persistentLifecycle.open(ctx);\n }\n\n protected override async _close(): Promise<void> {\n await this._persistentLifecycle.close();\n }\n\n get session() {\n return this._persistentLifecycle.state;\n }\n\n private async _startSession() {\n const peerConnection = await this._createRtcConnection();\n const sessionId = await this._initiateCallSession();\n return { sessionId, peerConnection };\n }\n\n private async _stopSession(session: Session): Promise<void> {\n session.peerConnection.close();\n }\n\n private async _createRtcConnection(): Promise<RTCPeerConnection> {\n const peerConnection = new RTCPeerConnection({\n iceServers: this._config.iceServers,\n bundlePolicy: 'max-bundle',\n });\n peerConnection.addEventListener('connectionstatechange', () => {\n if (peerConnection.connectionState === 'failed' || peerConnection.connectionState === 'closed') {\n log.info('calls connection failed', { state: peerConnection.connectionState });\n void this._persistentLifecycle.scheduleRestart();\n }\n });\n\n let iceTimeout = -1;\n peerConnection.addEventListener('iceconnectionstatechange', () => {\n clearTimeout(iceTimeout);\n if (peerConnection.iceConnectionState === 'failed' || peerConnection.iceConnectionState === 'closed') {\n log.info('calls connection to ICEs failed', { state: peerConnection.iceConnectionState });\n void this._persistentLifecycle.scheduleRestart();\n } else if (peerConnection.iceConnectionState === 'disconnected') {\n // TODO(mykola): we should start to inspect the connection stats from here on for\n // any other signs of trouble to guide what to do next (instead of just hoping\n // for the best like we do here for now)\n const timeoutSeconds = 7;\n iceTimeout = window.setTimeout(() => {\n if (peerConnection.iceConnectionState === 'connected') {\n log.info('calls iceConnectionState is connected');\n return;\n }\n\n log.info('calls iceConnectionState timed out', { state: peerConnection.iceConnectionState, timeoutSeconds });\n void this._persistentLifecycle.scheduleRestart();\n }, timeoutSeconds * 1_000);\n }\n });\n\n return peerConnection;\n }\n\n private async _initiateCallSession(): Promise<string> {\n log('creating new session');\n const { sessionId } = await this._fetch<SessionResponse>('/sessions/new?SESSION', { method: 'POST' });\n return sessionId;\n }\n\n private async _fetch<T extends ErrorResponse>(relativePath: string, requestInit?: RequestInit): Promise<T> {\n this.history.push({\n endpoint: relativePath,\n type: 'request',\n time: new Date().toISOString(),\n method: requestInit?.method ?? 'GET',\n body: requestInit?.body,\n });\n // TODO(mykola): Handle access control. Use EdgeClient.\n const response = await fetch(`${this._config.apiBase}${relativePath}`, { ...requestInit, redirect: 'manual' });\n if (response.status >= 400) {\n log.error('error while fetching from Calls service', { status: response.status, text: await response.text() });\n throw new Error('Error while fetching from Calls service');\n }\n\n try {\n const data = (await response.clone().json()) as T;\n this.history.push({\n endpoint: relativePath,\n type: 'response',\n time: new Date().toISOString(),\n status: response.status,\n json: data,\n });\n if (data.errorCode) {\n throw new Error(data.errorDescription);\n }\n\n return data;\n } catch (error) {\n const text = await response.text();\n this.history.push({\n endpoint: relativePath,\n type: 'response',\n time: new Date().toISOString(),\n status: response.status,\n text,\n });\n log.error('Error parsing response from Calls service', {\n error,\n text,\n status: response.status,\n });\n throw error;\n }\n }\n\n private async _pushTrackInBulk({\n ctx,\n peerConnection,\n transceiver,\n sessionId,\n trackName,\n }: {\n ctx: Context;\n peerConnection: RTCPeerConnection;\n transceiver: RTCRtpTransceiver;\n sessionId: string;\n trackName: string;\n }): Promise<TrackObject | void> {\n log.verbose('pushing track ', trackName);\n const pushedTrackPromise = this.pushTrackDispatcher\n .doBulkRequest({ trackName, transceiver }, (tracks) =>\n this.taskScheduler.schedule(async () => {\n // Create offer.\n // Turn on Opus DTX to save bandwidth and set the offer as the local description.\n const offer = await peerConnection.createOffer();\n offer.sdp = offer.sdp?.replace('useinbandfec=1', 'usedtx=1;useinbandfec=1');\n await peerConnection.setLocalDescription(offer);\n\n const response = await this._fetch<TracksResponse>(`/sessions/${sessionId}/tracks/new?PUSHING`, {\n method: 'POST',\n body: JSON.stringify({\n sessionDescription: {\n sdp: offer.sdp,\n type: 'offer',\n },\n tracks: tracks.map(({ trackName, transceiver }) => ({\n trackName,\n mid: transceiver.mid,\n location: 'local',\n })),\n }),\n });\n\n invariant(response.tracks !== undefined);\n if (!response.errorCode) {\n await peerConnection.setRemoteDescription(new RTCSessionDescription(response.sessionDescription));\n await peerConnectionIsConnected(peerConnection);\n }\n\n return {\n tracks: response.tracks,\n };\n }),\n )\n .then(async ({ tracks }) => {\n const trackData = tracks.find((t) => t.mid === transceiver.mid);\n if (trackData) {\n // we wait for the transceiver to start sending data before we emit\n // the track metadata to ensure that the track will be able to be\n // pulled before making the metadata available to anyone else.\n // await waitForTransceiverToSendData(ctx, transceiver);\n return {\n ...trackData,\n sessionId,\n location: 'remote',\n } satisfies TrackObject;\n } else {\n log.error('missing track data');\n }\n });\n\n const onDispose = async () => {\n if (transceiver.mid) {\n await this._closeTrackInBulk(peerConnection, transceiver.mid, sessionId);\n }\n };\n\n ctx?.onDispose(async () => await onDispose());\n this._ctx.onDispose(() => onDispose());\n\n return pushedTrackPromise;\n }\n\n async pushTrack({\n track,\n encodings = [],\n ctx,\n previousTrack,\n }: {\n track: MediaStreamTrack | null;\n ctx: Context;\n encodings?: RTCRtpEncodingParameters[];\n previousTrack?: TrackObject;\n }): Promise<TrackObject | undefined> {\n await this.waitUntilOpen();\n invariant(this.session);\n log('trying to push track', { track, previousTrack, encodings });\n if (previousTrack) {\n const transceiver = this.session.peerConnection.getTransceivers().find((t) => t.mid === previousTrack.mid);\n if (transceiver?.sender.track === track) {\n log.verbose('track already pushed', { track, previousTrack, transceiver });\n return previousTrack;\n } else if (transceiver) {\n log.verbose('replacing track', { track, previousTrack, transceiver });\n transceiver.sender.replaceTrack(track).catch((err) => log.catch(err));\n return previousTrack;\n }\n }\n invariant(track);\n\n // We want a single id for this connection.\n const stableId = crypto.randomUUID();\n const transceiver = this.session.peerConnection!.addTransceiver(track, { direction: 'sendonly' });\n log.verbose('creating transceiver');\n\n const pushedTrackData = await this._pushTrackInBulk({\n ctx,\n peerConnection: this.session.peerConnection!,\n transceiver,\n sessionId: this.session.sessionId!,\n trackName: stableId,\n });\n invariant(pushedTrackData);\n\n const parameters = transceiver.sender.getParameters();\n encodings.forEach((encoding, i) => {\n const existing = parameters.encodings[i];\n parameters.encodings[i] = { ...existing, ...encoding };\n });\n transceiver.sender.setParameters(parameters).catch((err) => log.catch(err));\n\n return pushedTrackData;\n }\n\n // TODO(mykola): Add retry logic if the tracks fails to pull.\n private async _pullTrackInBulk({\n peerConnection,\n sessionId,\n trackData,\n ctx,\n }: {\n peerConnection: RTCPeerConnection;\n sessionId: string;\n trackData: TrackObject;\n ctx?: Context;\n }): Promise<MediaStreamTrack | undefined> {\n let mid = '';\n log('pulling track', { trackName: trackData.trackName });\n const pulledTrackPromise = this.pullTrackDispatcher\n .doBulkRequest(trackData, (tracks) =>\n this.taskScheduler.schedule(async () => {\n const newTrackResponse = await this._fetch<TracksResponse>(`/sessions/${sessionId}/tracks/new?PULLING`, {\n method: 'POST',\n body: JSON.stringify({ tracks }),\n });\n\n if (newTrackResponse.errorCode) {\n throw new Error(newTrackResponse.errorDescription);\n }\n\n invariant(newTrackResponse.tracks);\n const trackMap = tracks.reduce((acc, track) => {\n const pulledTrackData = newTrackResponse.tracks?.find(\n (t) => t.trackName === track.trackName && t.sessionId === track.sessionId,\n );\n\n if (pulledTrackData && pulledTrackData.mid) {\n acc.set(track.trackName!, {\n mid: pulledTrackData.mid,\n resolvedTrack: resolveTrack(peerConnection, (t) => t.mid === pulledTrackData.mid),\n });\n }\n\n return acc;\n }, new Map<string, { resolvedTrack: Promise<MediaStreamTrack>; mid: string }>());\n\n if (newTrackResponse.requiresImmediateRenegotiation) {\n await peerConnection.setRemoteDescription(new RTCSessionDescription(newTrackResponse.sessionDescription));\n const answer = await peerConnection.createAnswer();\n await peerConnection.setLocalDescription(answer);\n\n const renegotiationResponse = await this._fetch<RenegotiationResponse>(\n `/sessions/${sessionId}/renegotiate`,\n {\n method: 'PUT',\n body: JSON.stringify({\n sessionDescription: {\n type: 'answer',\n sdp: peerConnection.currentLocalDescription?.sdp,\n },\n }),\n },\n );\n\n if (renegotiationResponse.errorCode) {\n throw new Error(renegotiationResponse.errorDescription);\n } else {\n await peerConnectionIsConnected(peerConnection);\n }\n }\n\n return { trackMap };\n }),\n )\n .then(({ trackMap }) => {\n const trackInfo = trackMap.get(trackData.trackName!);\n if (trackInfo) {\n return trackInfo.resolvedTrack\n .then((track) => {\n mid = trackInfo.mid;\n return track;\n })\n .catch((err) => log.catch(err));\n } else {\n log.info('missing track info', { trackData, availableTracks: Array.from(trackMap.keys()) });\n }\n });\n\n const onDispose = async () => {\n if (mid) {\n log('closing pulled track ', trackData.trackName);\n await this._closeTrackInBulk(peerConnection, mid, sessionId);\n mid = '';\n }\n };\n\n this._ctx.onDispose(() => onDispose());\n ctx?.onDispose(() => onDispose());\n\n return pulledTrackPromise as Promise<MediaStreamTrack | undefined>;\n }\n\n async pullTrack({\n ctx,\n trackData,\n }: {\n trackData: TrackObject;\n ctx?: Context;\n }): Promise<MediaStreamTrack | undefined> {\n await this.waitUntilOpen();\n\n invariant(this.session);\n const session = this.session;\n return this._pullTrackInBulk({\n peerConnection: session.peerConnection,\n sessionId: session.sessionId,\n trackData,\n ctx,\n });\n }\n\n async _closeTrackInBulk(peerConnection: RTCPeerConnection, mid: string, sessionId: string): Promise<void> {\n const transceiver = peerConnection.getTransceivers().find((t) => t.mid === mid);\n\n if (peerConnection.connectionState !== 'connected' || transceiver === undefined) {\n return;\n }\n await this.closeTrackDispatcher.doBulkRequest({ mid }, (mids) =>\n this.taskScheduler.schedule(async () => {\n transceiver.stop();\n const activeTransceivers = peerConnection\n .getTransceivers()\n .filter((t) => t.mid !== mid && t.direction !== 'stopped');\n\n let requestBody;\n if (activeTransceivers.length > 0) {\n // create an offer\n const offer = await peerConnection.createOffer();\n // And set the offer as the local description\n await peerConnection.setLocalDescription(offer);\n requestBody = {\n tracks: mids,\n sessionDescription: {\n sdp: peerConnection.localDescription?.sdp,\n type: 'offer',\n },\n force: false,\n };\n } else {\n requestBody = {\n tracks: mids,\n force: true,\n };\n }\n\n const response = await this._fetch<TracksResponse>(`/sessions/${sessionId}/tracks/close`, {\n method: 'PUT',\n body: JSON.stringify(requestBody),\n });\n\n if (requestBody.sessionDescription) {\n await peerConnection.setRemoteDescription(new RTCSessionDescription(response.sessionDescription));\n }\n }),\n );\n }\n}\n\nconst resolveTrack = async (\n peerConnection: RTCPeerConnection,\n compare: (t: RTCRtpTransceiver) => boolean,\n timeout = NETWORK_TIMEOUT,\n) =>\n new Promise<MediaStreamTrack>((resolve, reject) => {\n setTimeout(reject, timeout);\n const handler = () => {\n const transceiver = peerConnection.getTransceivers().find(compare);\n if (transceiver) {\n resolve(transceiver.receiver.track);\n peerConnection.removeEventListener('track', handler);\n }\n };\n\n peerConnection.addEventListener('track', handler);\n });\n\nconst peerConnectionIsConnected = async (peerConnection: RTCPeerConnection) => {\n if (peerConnection.connectionState !== 'connected') {\n const connected = new Promise((resolve, reject) => {\n // Timeout after 5s.\n const timeout = setTimeout(() => {\n peerConnection.removeEventListener('connectionstatechange', connectionStateChangeHandler);\n reject(new Error('Connection timeout'));\n }, NETWORK_TIMEOUT);\n\n const connectionStateChangeHandler = () => {\n if (peerConnection.connectionState === 'connected') {\n peerConnection.removeEventListener('connectionstatechange', connectionStateChangeHandler);\n clearTimeout(timeout);\n resolve(undefined);\n }\n };\n peerConnection.addEventListener('connectionstatechange', connectionStateChangeHandler);\n });\n\n await connected;\n }\n};\n\nconst INITIAL_DELAY = 50;\nconst MAX_DELAY = 500;\nconst MAX_RETRIES = 20;\nconst WAIT_FOR_DATA_TIMEOUT = 10_000;\n\nconst waitForTransceiverToSendData = async (ctx: Context, transceiver: RTCRtpTransceiver): Promise<void> => {\n let delay = INITIAL_DELAY;\n let checks = 0;\n const waitForData = new Trigger();\n ctx.onDispose(() => waitForData.throw(new Error('Transceiver was closed')));\n\n const checkStats = async () => {\n if (ctx.disposed) return;\n\n try {\n const stats = await transceiver.sender.getStats();\n let dataFound = false;\n stats.forEach((stat) => {\n if (stat.type === 'outbound-rtp' && stat.bytesSent > 0) {\n dataFound = true;\n }\n });\n\n if (dataFound) {\n waitForData.wake();\n return;\n }\n } catch {\n // Stats might not be available yet, continue checking\n }\n checks++;\n if (checks > MAX_RETRIES) {\n waitForData.throw(new Error('Transceiver did not send data'));\n return;\n }\n\n delay = Math.min(delay * 2, MAX_DELAY); // Exponential backoff with max cap\n scheduleTask(ctx, checkStats, delay);\n };\n\n void checkStats();\n return waitForData.wait({ timeout: WAIT_FOR_DATA_TIMEOUT });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Array that holds the last N items.\n */\nexport class HistoryCache<T> {\n private readonly _limit: number;\n private readonly _messages: T[];\n\n constructor(limit = 100) {\n this._limit = limit;\n this._messages = [];\n }\n\n push(...messages: T[]): void {\n if (this._messages.length >= this._limit) {\n this._messages.shift(); // Remove the oldest message\n }\n this._messages.push(...messages); // Add new message\n }\n\n get(): T[] {\n return this._messages;\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nconst DefaultBatchSizeLimit = 64;\n\ntype Task<Value = unknown> = () => Promise<Value>;\n\nexport class FIFOScheduler {\n #schedulerChain: Promise<void>;\n\n constructor() {\n this.#schedulerChain = Promise.resolve();\n }\n\n schedule<T>(task: Task<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n this.#schedulerChain = this.#schedulerChain.then(async () => {\n try {\n resolve(await task());\n } catch (error: any) {\n reject(error);\n }\n });\n });\n }\n}\n\n// TODO(mykola): Reconcile with @dxos/async task scheduling.\nexport class BulkRequestDispatcher<RequestEntryProps, BulkResponse> {\n #currentBatch: RequestEntryProps[];\n #currentBulkResponse: Promise<BulkResponse> | null;\n #batchSizeLimit: number;\n\n constructor(batchSizeLimit: number = DefaultBatchSizeLimit) {\n this.#currentBatch = [];\n this.#currentBulkResponse = null;\n this.#batchSizeLimit = batchSizeLimit;\n }\n\n /**\n * Returns a bulk response promise.\n * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.\n */\n doBulkRequest(\n params: RequestEntryProps,\n bulkRequestFunc: (bulkCopy: RequestEntryProps[]) => Promise<BulkResponse>,\n ): Promise<BulkResponse> {\n if (this.#currentBatch.length >= this.#batchSizeLimit) {\n // If it reaches the batch size limit, we make another bulk request.\n this.#currentBatch = [];\n this.#currentBulkResponse = null;\n }\n this.#currentBatch.push(params);\n if (this.#currentBulkResponse != null) {\n return this.#currentBulkResponse;\n }\n\n // Save the current batch list reference in the function scope because this.#currentBatch could be reset\n // if the batch limit is reached.\n const batch = this.#currentBatch;\n this.#currentBulkResponse = new Promise((resolve, reject) => {\n // script\n // |\n // V\n // microtasks (Promise)\n // |\n // V\n // macrotasks (setTimeout)\n //\n // macrotasks are run in the event loop iteration end, so we use that moment to make the bulkRequestFunc call.\n setTimeout(() => {\n // When the bulk request happens, the batch list and the response is reset to start another batch.\n // Coming callers will wait for a new response promise.\n this.#currentBulkResponse = null;\n\n // We cut here to make the bulk request.\n const batchCopy = batch.splice(0, batch.length);\n bulkRequestFunc(batchCopy)\n .then((result) => {\n resolve(result);\n })\n .catch((err) => {\n reject(err);\n });\n }, 0);\n });\n\n // This bulk response needs to be processed to extract the the result for the entry.\n return this.#currentBulkResponse;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { log } from '@dxos/log';\n\nexport const getUserMediaTrack = async (\n kind: MediaDeviceKind,\n constraints: MediaTrackConstraints = {},\n deviceList?: MediaDeviceInfo[],\n): Promise<MediaStreamTrack> => {\n deviceList ??= (await getDeviceList()).filter((device) => device.kind === kind);\n const firstDevice = deviceList[0];\n if (!firstDevice) {\n throw new Error('No devices found');\n }\n\n return acquireTrack(firstDevice, constraints);\n};\n\nconst acquireTrack = async (device: MediaDeviceInfo, constraints: MediaTrackConstraints): Promise<MediaStreamTrack> => {\n const { deviceId, label } = device;\n log.info(`requesting ${label}`);\n\n const mediaStream = await navigator.mediaDevices.getUserMedia(\n device.kind === 'videoinput' ? { video: { ...constraints, deviceId } } : { audio: { ...constraints, deviceId } },\n );\n return device.kind === 'videoinput' ? mediaStream.getVideoTracks()[0] : mediaStream.getAudioTracks()[0];\n};\n\n// TODO(mykola): Handle devicechange event.\nexport const getDeviceList = () => navigator.mediaDevices.enumerateDevices();\n\nconst SCREENSHARE_CONSTRAINTS = {\n video: {\n width: { max: 1920 },\n height: { max: 1080 },\n frameRate: { max: 10 },\n },\n};\n\nexport const getScreenshare = async ({ contentHint }: { contentHint: string }) => {\n // Get 1080p equivalent screenshare with 10fps, but save natural sharing content aspect ratio.\n const ms = await navigator.mediaDevices.getDisplayMedia(SCREENSHARE_CONSTRAINTS);\n ms.getVideoTracks().forEach((track) => {\n if (contentHint && 'contentHint' in track) {\n track.contentHint = contentHint;\n }\n });\n\n return ms;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n//\n\nimport { scheduleTaskInterval, waitForCondition } from '@dxos/async';\nimport { type Context, cancelWithContext } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Creates a black canvas stream track.\n * We need this to to have black rectangle video that is live (have frames) when video feed is disabled.\n */\nexport const createBlackCanvasStreamTrack = async ({\n ctx,\n width,\n height,\n}: {\n ctx: Context;\n width: number;\n height: number;\n}): Promise<MediaStreamTrack> => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n\n const canvasCtx = canvas.getContext('2d');\n invariant(canvasCtx);\n const drawFrame = () => {\n canvasCtx.fillStyle = 'black';\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n };\n scheduleTaskInterval(ctx, async () => drawFrame(), 200);\n\n const track = canvas.captureStream().getVideoTracks()[0];\n drawFrame();\n\n await cancelWithContext(ctx, waitForCondition({ condition: () => track.readyState === 'live', timeout: 1_000 }));\n\n return track;\n};\n\nlet audioContextStartedPreviously = false;\nconst userGestureEvents = [\n 'click',\n 'contextmenu',\n 'auxclick',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'pointerup',\n 'touchend',\n 'keydown',\n 'keyup',\n];\n\n/**\n * Creates an inaudible audio stream track.\n * We need this to have audio track available when audio is disabled.\n */\nexport const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {\n const audioContext = new window.AudioContext();\n\n const oscillator = audioContext.createOscillator();\n oscillator.type = 'triangle';\n oscillator.frequency.setValueAtTime(20, audioContext.currentTime);\n\n const gainNode = audioContext.createGain();\n gainNode.gain.setValueAtTime(0, audioContext.currentTime);\n oscillator.connect(gainNode);\n\n const destination = audioContext.createMediaStreamDestination();\n gainNode.connect(destination);\n\n let oscillatorStarted = false;\n const ensureOscillatorStarted = () => {\n if (oscillatorStarted) return;\n oscillator.start();\n oscillatorStarted = true;\n };\n\n const stateChangeHandler = () => {\n if (audioContext.state === 'running') {\n audioContextStartedPreviously = true;\n ensureOscillatorStarted();\n }\n\n if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {\n resumeAudioContext();\n }\n };\n\n audioContext.addEventListener('statechange', stateChangeHandler);\n\n const resumeAudioContext = () => {\n void audioContext.resume().then(() => {\n cleanUpUserGestureListeners();\n });\n };\n\n const cleanUpUserGestureListeners = () => {\n userGestureEvents.forEach((gesture) => {\n document.removeEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n };\n\n if (audioContextStartedPreviously) {\n resumeAudioContext();\n } else {\n userGestureEvents.forEach((gesture) => {\n document.addEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n }\n\n ctx.onDispose(async () => {\n cleanUpUserGestureListeners();\n oscillator.disconnect();\n oscillator.stop();\n await audioContext.close();\n });\n\n return destination.stream.getAudioTracks()[0];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { Obj } from '@dxos/echo';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/operations';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { type ContentBlock } from '@dxos/types';\n\nexport const useOnEditAnalytics = (\n message: any | undefined,\n textBlock: ContentBlock.Text | undefined,\n editing: boolean,\n) => {\n const { invokePromise } = useOperationInvoker();\n\n const onEdit = useCallback(() => {\n if (!message || !textBlock) {\n return;\n }\n\n const db = Obj.getDatabase(message);\n if (!db) {\n return;\n }\n\n void invokePromise(ObservabilityOperation.SendEvent, {\n name: 'threads.message.update',\n properties: {\n spaceId: db.spaceId,\n messageId: message.id,\n messageLength: textBlock?.text.length,\n },\n });\n }, [invokePromise, message, textBlock]);\n\n useOnTransition(editing, true, false, onEdit);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport { createBlackCanvasStreamTrack } from '../calls/util/stub-media-streams';\n\nexport const useBlackCanvasStreamTrack = () => {\n const [blackCanvasStreamTrack, setBlackCanvasStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n useEffect(() => {\n const ctx = new Context();\n scheduleTask(ctx, async () => {\n const blackCanvasStreamTrack = await createBlackCanvasStreamTrack({ ctx, width: 720, height: 480 });\n setBlackCanvasStreamTrack(blackCanvasStreamTrack);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, []);\n\n return blackCanvasStreamTrack;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n// TODO(burdon): Standardize across plugins/composer.\nexport const useDebugMode = () => {\n const [enabled, setEnabled] = useState(false);\n useEffect(() => {\n const handler = (ev: KeyboardEvent) => {\n if (ev.key.toLowerCase() === 'd' && ev.ctrlKey) {\n ev.preventDefault();\n setEnabled(!enabled);\n }\n };\n\n document.addEventListener('keypress', handler);\n return () => {\n document.removeEventListener('keypress', handler);\n };\n }, [enabled]);\n\n return enabled;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport { createInaudibleAudioStreamTrack } from '../calls/util/stub-media-streams';\n\nexport const useInaudibleAudioStreamTrack = () => {\n const [audioStreamTrack, setAudioStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n useEffect(() => {\n const ctx = new Context();\n scheduleTask(ctx, async () => {\n const audioStreamTrack = await createInaudibleAudioStreamTrack({ ctx });\n setAudioStreamTrack(audioStreamTrack);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, []);\n\n return audioStreamTrack;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type RefObject, useEffect, useRef, useState } from 'react';\n\nexport const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement | null>, videoSrc: string) => {\n // Get video stream track.\n const [videoStreamTrack, setVideoStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n const hadRun = useRef(false);\n useEffect(() => {\n // This is done to capture only one video stream.\n if (!videoElement.current || hadRun.current || !videoSrc) {\n return;\n }\n hadRun.current = true;\n videoElement.current.addEventListener('playing', () => {\n if (videoStreamTrack) {\n return;\n }\n const stream = (videoElement.current as any).captureStream();\n const track = stream.getTracks()[0];\n if (track && !videoStreamTrack) {\n setVideoStreamTrack(track);\n }\n stream.onaddtrack = (event: MediaStreamTrackEvent) => {\n if (event.track.kind === 'video' && !videoStreamTrack) {\n setVideoStreamTrack(event.track);\n }\n };\n });\n videoElement.current.src = videoSrc;\n }, [videoElement.current, videoSrc]);\n\n return videoStreamTrack;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\n// TODO(wittjosiah): Needs screenshots.\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.thread',\n name: 'Chat',\n description: trim`\n Multi-modal communication platform supporting text chat, voice, and video conferencing.\n Create threaded conversations and add contextual comments directly on any workspace object.\n `,\n icon: 'ph--video-conference--regular',\n iconHue: 'rose',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n\nexport const THREAD_ITEM = `${meta.id}.item`;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Annotation, Ref, Type } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { ClientEvents } from '@dxos/plugin-client/types';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceOperation } from '@dxos/plugin-space/operations';\nimport { SpaceCapabilities, SpaceEvents, type CreateObject } from '@dxos/plugin-space/types';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { AnchoredTo, Message, Thread } from '@dxos/types';\n\nimport {\n AppGraphBuilder,\n BlueprintDefinition,\n CallManager,\n Markdown,\n OperationHandler,\n UndoMappings,\n ReactRoot,\n ReactSurface,\n ThreadState,\n} from '#capabilities';\nimport { THREAD_ITEM, meta } from '#meta';\nimport { ThreadOperation } from '#operations';\nimport { Channel } from '#types';\n\nimport { translations } from './translations';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\n\n// TODO(wittjosiah): Rename to ChatPlugin.\n// TODO(wittjosiah): Enabling comments should likely be factored out of this plugin but depend on it's capabilities.\n\nexport const ThreadPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addMetadataModule({\n metadata: [\n {\n id: Type.getTypename(Channel.Channel),\n metadata: {\n icon: Annotation.IconAnnotation.get(Channel.Channel).pipe(Option.getOrThrow).icon,\n iconHue: Annotation.IconAnnotation.get(Channel.Channel).pipe(Option.getOrThrow).hue ?? 'white',\n createObject: ((props, options) =>\n Effect.gen(function* () {\n const object = Channel.make(props);\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n hidden: true,\n targetNodeId: options.targetNodeId,\n });\n })) satisfies CreateObject,\n },\n },\n {\n id: Type.getTypename(Thread.Thread),\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: Thread.Thread) => await Ref.Array.loadAll(thread.messages ?? []),\n },\n },\n {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: Thread.Thread, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.name, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n },\n ],\n }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addOperationHandlerModule({ id: 'undo-mappings', activate: UndoMappings }),\n AppPlugin.addReactRootModule({ activate: ReactRoot }),\n AppPlugin.addSchemaModule({\n schema: [AnchoredTo.AnchoredTo, Channel.Channel, Message.Message, Thread.Thread],\n }),\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations: [...translations, ...threadTranslations] }),\n Plugin.addModule({\n id: 'call-manager',\n activatesOn: ClientEvents.ClientReady,\n activate: CallManager,\n }),\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // Plugin.addModule({\n // id: 'settings',\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n Plugin.addModule({\n id: 'state',\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: AppActivationEvents.SetupSettings,\n activate: ThreadState,\n }),\n Plugin.addModule({\n id: 'on-space-created',\n activatesOn: SpaceEvents.SpaceCreated,\n activate: () =>\n Effect.succeed(\n Capability.contributes(SpaceCapabilities.OnCreateSpace, (params) =>\n Operation.invoke(ThreadOperation.OnCreateSpace, params),\n ),\n ),\n }),\n Plugin.addModule({\n id: 'markdown',\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n Plugin.make,\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\nimport { Channel } from '#types';\n\nexport const translations = [\n {\n 'en-US': {\n [Type.getTypename(Channel.Channel)]: {\n 'typename.label': 'Channel',\n 'typename.label_zero': 'Channels',\n 'typename.label_one': 'Channel',\n 'typename.label_other': 'Channels',\n 'object-name.placeholder': 'New channel',\n 'add-object.label': 'Add channel',\n 'rename-object.label': 'Rename channel',\n 'delete-object.label': 'Delete channel',\n 'object-deleted.label': 'Channel deleted',\n },\n [meta.id]: {\n 'plugin.name': 'Chat',\n 'channel-title.label': 'Title',\n 'message.placeholder': 'Reply…',\n 'activity.message': 'Processing…',\n 'anonymous.label': 'Anonymous',\n 'delete-message-block.label': 'Delete message block',\n 'detached-thread.label': 'Referenced content was removed',\n 'delete-thread.label': 'Delete thread',\n 'resolve-thread.label': 'Resolve thread',\n 'thread-deleted.label': 'Thread deleted',\n 'message-deleted.label': 'Message deleted',\n 'comments.heading': 'Comments',\n 'chat.heading': 'Chat',\n 'draft.button': 'DRAFT',\n 'no-comments.title': 'Comments',\n 'no-comments.message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\n 'toggle-show-resolved.label': 'Show resolved',\n 'unnamed-object-threads.label': 'Threads',\n 'mark-as-resolved.label': 'Mark as resolved',\n 'mark-as-unresolved.label': 'Mark as unresolved',\n 'save-message.label': 'Save',\n 'edit-message.label': 'Edit',\n 'delete-message.label': 'Delete message',\n 'accept-proposal.label': 'Accept proposal',\n 'open-comments-panel.label': 'Show Comments',\n 'comments.label': 'Comments',\n 'show-all.label': 'All comments',\n 'show-unresolved.label': 'Unresolved comments',\n 'add-comment.label': 'Add comment',\n\n 'channel-companion.label': 'Channel',\n 'call-panel.label': 'Active Call',\n\n 'display-name.label': 'Display name',\n 'display-name.description': 'Set your display name before joining a meeting.',\n 'display-name-input.placeholder': 'Enter your name',\n 'set-display-name.label': 'Continue',\n\n 'call-tab.label': 'Call',\n 'meeting-status.title': 'Calls',\n 'share-meeting-link.label': 'Share meeting',\n 'show-webrtc-stats.title': 'WebRTC Stats',\n 'show-calls-history.title': 'Service History',\n\n 'meeting-summary.label': 'Summary',\n 'summarize.label': 'Summarize',\n 'summarizing.label': 'Creating summary...',\n 'create-summary.message': 'A summary doesn’t exist for this meeting yet. Create one now?',\n\n 'icon-pin.label': 'Pin video',\n 'icon-unpin.label': 'Unpin video',\n 'icon-wave.label': 'Waving',\n 'icon-muted.label': 'Muted',\n 'join-call.button': 'Join',\n 'leave-call.button': 'Leave',\n 'mic-on.button': 'Unmute',\n 'mic-off.button': 'Mute',\n 'camera-on.button': 'Turn camera on',\n 'camera-off.button': 'Turn camera off',\n 'camera-off.label': 'Camera off',\n 'raise-hand.button': 'Raise hand',\n 'lower-hand.button': 'Lower hand',\n 'screenshare-on.button': 'Share screen',\n 'screenshare-off.button': 'Stop streaming',\n\n 'channel-toolbar.title': 'Channel actions',\n 'start-video-call.menu': 'Start video call',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
- "mappings": "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",
6
- "names": ["Atom", "Event", "synchronized", "Resource", "invariant", "isNonNullable", "md5Hex", "DeferredTask", "Event", "scheduleTaskInterval", "synchronized", "Context", "Resource", "generateName", "invariant", "PublicKey", "log", "buf", "ActivitySchema", "ConnectionState", "isNonNullable", "invariant", "buf", "UserStateSchema", "CALLS_URL", "codec", "encode", "message", "toBinary", "create", "decode", "fromBinary", "TrackNameCodec", "trackData", "sessionId", "trackName", "mid", "name", "split", "location", "DISCONNECTED_ABRUPT_TIMEOUT", "CallSwarmSynchronizer", "Resource", "stateUpdated", "Event", "_state", "activities", "_networkService", "_lastSwarmEvent", "undefined", "_reconcileSwarmStateTask", "_identityKey", "_deviceKey", "_displayName", "_swarmCtx", "_sendStateTask", "networkService", "_getState", "setRaisedHand", "raisedHand", "_notifyAndSchedule", "setSpeaking", "speaking", "setJoined", "joined", "setTracks", "tracks", "setActivity", "key", "payload", "lamportTimestamp", "LamportTimestampCrdt", "increment", "id", "_setIdentity", "identity", "identityKey", "toHex", "profile", "displayName", "generateName", "_setDevice", "device", "deviceKey", "_setRoomId", "roomId", "log", "verbose", "_open", "DeferredTask", "_ctx", "_sendState", "_reconcileSwarmState", "_close", "join", "invariant", "Context", "topic", "getTopic", "peer", "peerKey", "stream", "subscribeSwarmState", "subscribe", "event", "_processSwarmEvent", "cleanup", "close", "leaveSwarm", "catch", "err", "window", "removeEventListener", "addEventListener", "onDispose", "leave", "dispose", "users", "self", "querySwarm", "swarm", "peers", "emit", "schedule", "state", "name", "Object", "fromEntries", "entries", "map", "activity", "buf", "create", "ActivitySchema", "joinSwarm", "codec", "encode", "swarmEvent", "inactivePeers", "filter", "disconnected", "connectionState", "ConnectionState", "DISCONNECTED_ABRUPT", "Date", "now", "sort", "peer1", "peer2", "localeCompare", "decode", "error", "isNonNullable", "find", "user", "length", "activityKeys", "Set", "flatMap", "keys", "forEach", "lastActivity", "getLastState", "version", "some", "CONNECTED", "scheduleTaskInterval", "Math", "min", "states", "maxTimestamp", "max", "sortedStates", "a", "b", "timestamp", "PublicKey", "fromHex", "md5Hex", "DeferredTask", "Event", "sleep", "synchronized", "Resource", "cancelWithContext", "invariant", "log", "DeferredTask", "Event", "sleep", "Resource", "monitorAudioLevel", "mediaStreamTrack", "intervalMs", "onMeasure", "timeout", "interval", "audioContext", "AudioContext", "stream", "MediaStream", "addTrack", "mediaStreamAudioSourceNode", "createMediaStreamSource", "analyserNode", "createAnalyser", "connect", "fftSize", "pcmData", "Float32Array", "peak", "window", "setInterval", "tick", "setTimeout", "getFloatTimeDomainData", "sumSquares", "amplitude", "current", "Math", "sqrt", "length", "disconnect", "close", "clearInterval", "clearTimeout", "removeTrack", "PersistentLifecycle", "Trigger", "scheduleTask", "Resource", "invariant", "log", "HistoryCache", "_limit", "_messages", "limit", "push", "messages", "length", "shift", "get", "DefaultBatchSizeLimit", "FIFOScheduler", "Promise", "resolve", "schedule", "task", "reject", "then", "error", "BulkRequestDispatcher", "batchSizeLimit", "doBulkRequest", "params", "bulkRequestFunc", "length", "push", "batch", "setTimeout", "batchCopy", "splice", "result", "catch", "err", "NETWORK_TIMEOUT", "CallsServicePeer", "Resource", "history", "HistoryCache", "_persistentLifecycle", "PersistentLifecycle", "start", "_startSession", "stop", "session", "_stopSession", "_config", "taskScheduler", "FIFOScheduler", "pushTrackDispatcher", "BulkRequestDispatcher", "pullTrackDispatcher", "closeTrackDispatcher", "config", "_open", "ctx", "open", "_close", "close", "state", "peerConnection", "_createRtcConnection", "sessionId", "_initiateCallSession", "RTCPeerConnection", "iceServers", "bundlePolicy", "addEventListener", "connectionState", "log", "info", "scheduleRestart", "iceTimeout", "clearTimeout", "iceConnectionState", "timeoutSeconds", "window", "setTimeout", "_fetch", "method", "relativePath", "requestInit", "push", "endpoint", "type", "time", "Date", "toISOString", "body", "response", "fetch", "apiBase", "redirect", "status", "error", "text", "Error", "data", "clone", "json", "errorCode", "errorDescription", "_pushTrackInBulk", "transceiver", "trackName", "verbose", "pushedTrackPromise", "doBulkRequest", "tracks", "schedule", "offer", "createOffer", "sdp", "replace", "setLocalDescription", "JSON", "stringify", "sessionDescription", "map", "mid", "location", "invariant", "undefined", "setRemoteDescription", "RTCSessionDescription", "peerConnectionIsConnected", "then", "trackData", "find", "t", "onDispose", "_closeTrackInBulk", "_ctx", "pushTrack", "track", "encodings", "previousTrack", "waitUntilOpen", "getTransceivers", "sender", "replaceTrack", "catch", "err", "stableId", "crypto", "randomUUID", "addTransceiver", "direction", "pushedTrackData", "parameters", "getParameters", "forEach", "encoding", "i", "existing", "setParameters", "_pullTrackInBulk", "pulledTrackPromise", "newTrackResponse", "trackMap", "reduce", "acc", "pulledTrackData", "set", "resolvedTrack", "resolveTrack", "Map", "requiresImmediateRenegotiation", "answer", "createAnswer", "renegotiationResponse", "currentLocalDescription", "trackInfo", "get", "availableTracks", "Array", "from", "keys", "pullTrack", "mids", "activeTransceivers", "filter", "requestBody", "length", "localDescription", "force", "compare", "timeout", "Promise", "resolve", "reject", "handler", "receiver", "removeEventListener", "connected", "connectionStateChangeHandler", "log", "getUserMediaTrack", "kind", "constraints", "deviceList", "getDeviceList", "filter", "device", "firstDevice", "Error", "acquireTrack", "deviceId", "label", "info", "mediaStream", "navigator", "mediaDevices", "getUserMedia", "video", "audio", "getVideoTracks", "getAudioTracks", "enumerateDevices", "SCREENSHARE_CONSTRAINTS", "width", "max", "height", "frameRate", "getScreenshare", "contentHint", "ms", "getDisplayMedia", "forEach", "track", "scheduleTaskInterval", "waitForCondition", "cancelWithContext", "invariant", "createBlackCanvasStreamTrack", "ctx", "width", "height", "canvas", "document", "createElement", "canvasCtx", "getContext", "drawFrame", "fillStyle", "fillRect", "track", "captureStream", "getVideoTracks", "condition", "readyState", "timeout", "audioContextStartedPreviously", "userGestureEvents", "createInaudibleAudioStreamTrack", "audioContext", "window", "AudioContext", "oscillator", "createOscillator", "type", "frequency", "setValueAtTime", "currentTime", "gainNode", "createGain", "gain", "connect", "destination", "createMediaStreamDestination", "oscillatorStarted", "ensureOscillatorStarted", "start", "stateChangeHandler", "state", "resumeAudioContext", "addEventListener", "resume", "then", "cleanUpUserGestureListeners", "forEach", "gesture", "removeEventListener", "capture", "onDispose", "disconnect", "stop", "close", "stream", "getAudioTracks", "NOT_SPEAKING_AFTER", "START_SPEAKING_THRESHOLD", "CONTINUE_SPEAKING_THRESHOLD", "MIN_EVENT_INTERVAL", "SpeakingMonitor", "Resource", "speakingChanged", "Event", "_isSpeaking", "_lastEventTime", "_deferredUpdate", "_mediaStreamTrack", "isSpeaking", "_open", "DeferredTask", "_ctx", "_emitSpeakingChanged", "timeout", "cleanup", "monitorAudioLevel", "mediaStreamTrack", "onMeasure", "vol", "audioLevelAboveThreshold", "clearTimeout", "undefined", "schedule", "setTimeout", "onDispose", "timeSinceLastEvent", "Date", "now", "timeToNextEvent", "sleep", "emit", "VIDEO_WIDTH", "VIDEO_HEIGHT", "MAX_WEB_CAM_FRAMERATE", "MAX_WEB_CAM_BITRATE", "RETRY_INTERVAL", "USE_INAUDIBLE_AUDIO", "MediaManager", "Resource", "stateUpdated", "Event", "_state", "pulledVideoStreams", "pulledAudioTracks", "_speakingMonitor", "undefined", "_trackToReconcile", "_blackCanvasStreamTrack", "_inaudibleAudioStreamTrack", "_pushTracksTask", "_pullTracksTask", "isSpeaking", "_getState", "_open", "createBlackCanvasStreamTrack", "ctx", "_ctx", "width", "height", "videoTrack", "videoStream", "MediaStream", "addTrack", "createInaudibleAudioStreamTrack", "audioTrack", "DeferredTask", "_pushTracks", "_reconcilePulledMedia", "_close", "close", "removeTrack", "stop", "screenshareTrack", "join", "serviceConfig", "peer", "CallsServicePeer", "open", "schedule", "leave", "Promise", "all", "Object", "values", "map", "dispose", "pushedVideoTrack", "pushedAudioTrack", "pushedScreenshareTrack", "turnVideoOn", "getUserMediaTrack", "videoEnabled", "emit", "turnVideoOff", "turnAudioOn", "audioEnabled", "echoCancellation", "noiseSuppression", "autoGainControl", "sampleRate", "SpeakingMonitor", "speakingChanged", "on", "turnAudioOff", "turnScreenshareOn", "ms", "getScreenshare", "contentHint", "screenshareVideoStream", "getVideoTracks", "screenshareEnabled", "turnScreenshareOff", "_schedulePullTracks", "tracks", "every", "name", "includes", "length", "log", "cancelWithContext", "sleep", "trackNames", "tracksToPull", "filter", "audioTracksToClose", "entries", "key", "some", "videoStreamsToClose", "currentAudioTracks", "keys", "currentVideoStreams", "pullResults", "_pullTrack", "_", "shouldRetry", "info", "invariant", "isOpen", "updated", "pushVideoResult", "pushAudioResult", "pushScreenshareResult", "_maybePushTrack", "maxFramerate", "maxBitrate", "networkPriority", "track", "derive", "trackData", "TrackNameCodec", "decode", "pullTrack", "mid", "readyState", "Error", "kind", "onDispose", "mediaStream", "stream", "err", "previousTrack", "encodings", "pushTrack", "CallManager", "Resource", "callStateUpdated", "Event", "mediaStateUpdated", "left", "_stateAtom", "Atom", "make", "call", "media", "pulledAudioTracks", "pulledVideoStreams", "_roomIdAtom", "get", "roomId", "_raisedHandAtom", "raisedHand", "_speakingAtom", "speaking", "_joinedAtom", "joined", "_selfAtom", "self", "_tracksAtom", "tracks", "_usersAtom", "users", "_mediaAtom", "_audioTracksToPlayAtom", "state", "map", "user", "audioEnabled", "audio", "undefined", "filter", "isNonNullable", "track", "_videoStreamAtomFamily", "family", "name", "stream", "_activityAtomFamily", "key", "activities", "_swarmSynchronizer", "_mediaManager", "roomIdAtom", "raisedHandAtom", "speakingAtom", "joinedAtom", "selfAtom", "tracksAtom", "usersAtom", "mediaAtom", "audioTracksToPlayAtom", "stateAtom", "videoStreamAtom", "activityAtom", "setRoomId", "_setRoomId", "setSpeaking", "setRaisedHand", "setActivity", "payload", "turnAudioOn", "turnAudioOff", "turnVideoOn", "turnVideoOff", "turnScreenshareOn", "turnScreenshareOff", "_client", "_registry", "config", "getOrThrow", "networkService", "services", "NetworkService", "invariant", "CallSwarmSynchronizer", "MediaManager", "_open", "open", "subscription", "halo", "identity", "subscribe", "_setIdentity", "device", "_setDevice", "_ctx", "onDispose", "unsubscribe", "stateUpdated", "on", "_onCallStateUpdated", "_onMediaStateUpdated", "_close", "leave", "close", "peek", "peers", "querySwarm", "length", "join", "setJoined", "iceServers", "apiBase", "CALLS_URL", "emit", "tracksToPull", "id", "flatMap", "video", "screenshare", "_schedulePullTracks", "_updateState", "setTracks", "pushedVideoTrack", "TrackNameCodec", "encode", "pushedAudioTrack", "pushedScreenshareTrack", "videoEnabled", "screenshareEnabled", "isSpeaking", "set", "_getState", "useCallback", "useOperationInvoker", "Obj", "ObservabilityOperation", "useOnTransition", "useOnEditAnalytics", "message", "textBlock", "editing", "invokePromise", "useOperationInvoker", "onEdit", "useCallback", "db", "Obj", "getDatabase", "ObservabilityOperation", "SendEvent", "name", "properties", "spaceId", "messageId", "id", "messageLength", "text", "length", "useOnTransition", "useEffect", "useState", "scheduleTask", "Context", "useBlackCanvasStreamTrack", "blackCanvasStreamTrack", "setBlackCanvasStreamTrack", "useState", "undefined", "useEffect", "ctx", "Context", "scheduleTask", "createBlackCanvasStreamTrack", "width", "height", "dispose", "useEffect", "useState", "useDebugMode", "enabled", "setEnabled", "useState", "useEffect", "handler", "ev", "key", "toLowerCase", "ctrlKey", "preventDefault", "document", "addEventListener", "removeEventListener", "useEffect", "useState", "scheduleTask", "Context", "useInaudibleAudioStreamTrack", "audioStreamTrack", "setAudioStreamTrack", "useState", "undefined", "useEffect", "ctx", "Context", "scheduleTask", "createInaudibleAudioStreamTrack", "dispose", "useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useEffect", "useRef", "useState", "useVideoStreamTrack", "videoElement", "videoSrc", "videoStreamTrack", "setVideoStreamTrack", "useState", "undefined", "hadRun", "useRef", "useEffect", "current", "addEventListener", "stream", "captureStream", "track", "getTracks", "onaddtrack", "event", "kind", "src", "trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "THREAD_ITEM", "Effect", "Option", "Capability", "Plugin", "AppActivationEvents", "AppPlugin", "Annotation", "Ref", "Type", "Operation", "ClientEvents", "MarkdownEvents", "SpaceOperation", "SpaceCapabilities", "SpaceEvents", "translations", "threadTranslations", "AnchoredTo", "Message", "Thread", "AppGraphBuilder", "BlueprintDefinition", "CallManager", "Markdown", "OperationHandler", "UndoMappings", "ReactRoot", "ReactSurface", "ThreadState", "THREAD_ITEM", "meta", "ThreadOperation", "Channel", "Type", "meta", "Channel", "translations", "Type", "getTypename", "Channel", "meta", "id", "ThreadPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addAppGraphModule", "activate", "AppGraphBuilder", "addBlueprintDefinitionModule", "BlueprintDefinition", "addMetadataModule", "metadata", "id", "Type", "getTypename", "Channel", "icon", "Annotation", "IconAnnotation", "get", "getOrThrow", "iconHue", "hue", "createObject", "props", "options", "gen", "object", "make", "Operation", "invoke", "SpaceOperation", "AddObject", "target", "hidden", "targetNodeId", "Thread", "loadReferences", "thread", "Ref", "Array", "loadAll", "messages", "THREAD_ITEM", "parse", "item", "type", "label", "name", "data", "addOperationHandlerModule", "OperationHandler", "UndoMappings", "addReactRootModule", "ReactRoot", "addSchemaModule", "schema", "AnchoredTo", "Message", "addSurfaceModule", "ReactSurface", "addTranslationsModule", "translations", "threadTranslations", "addModule", "activatesOn", "ClientEvents", "ClientReady", "CallManager", "AppActivationEvents", "SetupSettings", "ThreadState", "SpaceEvents", "SpaceCreated", "succeed", "Capability", "contributes", "SpaceCapabilities", "OnCreateSpace", "params", "ThreadOperation", "MarkdownEvents", "SetupExtensions", "Markdown"]
7
- }
@@ -1 +0,0 @@
1
- {"inputs":{"src/types/capabilities.ts":{"bytes":3954,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"format":"esm"},"src/types/Channel.ts":{"bytes":4244,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"format":"esm"},"src/types/Settings.ts":{"bytes":970,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true}],"format":"esm"},"src/types/types.ts":{"bytes":1227,"imports":[{"path":"src/types/Settings.ts","kind":"import-statement","original":"./Settings"}],"format":"esm"},"src/types/index.ts":{"bytes":702,"imports":[{"path":"src/types/capabilities.ts","kind":"import-statement","original":"./capabilities"},{"path":"src/types/Channel.ts","kind":"import-statement","original":"./Channel"},{"path":"src/types/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/calls/types.ts":{"bytes":5755,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true}],"format":"esm"},"src/calls/call-swarm-synchronizer.ts":{"bytes":37775,"imports":[{"path":"md5-hex","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/edge/messenger","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/calls/util/audio.ts":{"bytes":5850,"imports":[],"format":"esm"},"src/calls/util/history-cache.ts":{"bytes":2172,"imports":[],"format":"esm"},"src/calls/util/task-scheduling.ts":{"bytes":9247,"imports":[],"format":"esm"},"src/calls/util/calls-service.ts":{"bytes":66370,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/calls/util/history-cache.ts","kind":"import-statement","original":"./history-cache"},{"path":"src/calls/util/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/calls/util/media.ts":{"bytes":6357,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/calls/util/stub-media-streams.ts":{"bytes":12096,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/calls/util/index.ts":{"bytes":761,"imports":[{"path":"src/calls/util/audio.ts","kind":"import-statement","original":"./audio"},{"path":"src/calls/util/calls-service.ts","kind":"import-statement","original":"./calls-service"},{"path":"src/calls/util/media.ts","kind":"import-statement","original":"./media"},{"path":"src/calls/util/stub-media-streams.ts","kind":"import-statement","original":"./stub-media-streams"}],"format":"esm"},"src/calls/speaking-monitor.ts":{"bytes":9345,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/calls/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/calls/media-manager.ts":{"bytes":48605,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/calls/speaking-monitor.ts","kind":"import-statement","original":"./speaking-monitor"},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"},{"path":"src/calls/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/calls/call-manager.ts":{"bytes":32529,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/calls/call-swarm-synchronizer.ts","kind":"import-statement","original":"./call-swarm-synchronizer"},{"path":"src/calls/media-manager.ts","kind":"import-statement","original":"./media-manager"},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/calls/index.ts":{"bytes":972,"imports":[{"path":"src/calls/call-manager.ts","kind":"import-statement","original":"./call-manager"},{"path":"src/calls/call-swarm-synchronizer.ts","kind":"import-statement","original":"./call-swarm-synchronizer"},{"path":"src/calls/media-manager.ts","kind":"import-statement","original":"./media-manager"},{"path":"src/calls/speaking-monitor.ts","kind":"import-statement","original":"./speaking-monitor"},{"path":"src/calls/types.ts","kind":"import-statement","original":"./types"},{"path":"src/calls/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/hooks/analytics.ts":{"bytes":3903,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useBlackCanvasStreamTrack.tsx":{"bytes":3120,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/calls/util/stub-media-streams.ts","kind":"import-statement","original":"../calls/util/stub-media-streams"}],"format":"esm"},"src/hooks/useDebugMode.ts":{"bytes":2495,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useInaudibleAudioStreamTrack.tsx":{"bytes":2911,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/calls/util/stub-media-streams.ts","kind":"import-statement","original":"../calls/util/stub-media-streams"}],"format":"esm"},"src/hooks/useStatus.ts":{"bytes":3572,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useVideoStreamTrack.tsx":{"bytes":4450,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/index.ts":{"bytes":1045,"imports":[{"path":"src/hooks/analytics.ts","kind":"import-statement","original":"./analytics"},{"path":"src/hooks/useBlackCanvasStreamTrack.tsx","kind":"import-statement","original":"./useBlackCanvasStreamTrack"},{"path":"src/hooks/useDebugMode.ts","kind":"import-statement","original":"./useDebugMode"},{"path":"src/hooks/useInaudibleAudioStreamTrack.tsx","kind":"import-statement","original":"./useInaudibleAudioStreamTrack"},{"path":"src/hooks/useStatus.ts","kind":"import-statement","original":"./useStatus"},{"path":"src/hooks/useVideoStreamTrack.tsx","kind":"import-statement","original":"./useVideoStreamTrack"}],"format":"esm"},"src/meta.ts":{"bytes":2178,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/translations.ts":{"bytes":11405,"imports":[{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/ThreadPlugin.tsx":{"bytes":16879,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/types","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/types","kind":"import-statement","external":true},{"path":"@dxos/react-ui-thread","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"src/index.ts":{"bytes":889,"imports":[{"path":"src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"src/calls/index.ts","kind":"import-statement","original":"./calls"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/ThreadPlugin.tsx","kind":"import-statement","original":"./ThreadPlugin"}],"format":"esm"},"src/blueprints/thread-blueprint.ts":{"bytes":3524,"imports":[{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true}],"format":"esm"},"src/blueprints/index.ts":{"bytes":617,"imports":[{"path":"src/blueprints/thread-blueprint.ts","kind":"import-statement","original":"./thread-blueprint"}],"format":"esm"},"src/operations/definitions.ts":{"bytes":20868,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"src/operations/add-message.ts":{"bytes":10698,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create.ts":{"bytes":6293,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-deck/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-channel.ts":{"bytes":1873,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-channel-thread.ts":{"bytes":2773,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/create-proposals.ts":{"bytes":6715,"imports":[{"path":"effect/Array","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"@dxos/assistant","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/delete.ts":{"bytes":7240,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/delete-message.ts":{"bytes":6246,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/on-create-space.ts":{"bytes":2431,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/restore.ts":{"bytes":3658,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/restore-message.ts":{"bytes":4355,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/select.ts":{"bytes":2831,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/types/index.ts","kind":"import-statement","original":"../types"},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/toggle-resolved.ts":{"bytes":4283,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/operations/index.ts":{"bytes":2298,"imports":[{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/operations/definitions.ts","kind":"import-statement","original":"./definitions"},{"path":"src/operations/add-message.ts","kind":"dynamic-import","original":"./add-message"},{"path":"src/operations/create.ts","kind":"dynamic-import","original":"./create"},{"path":"src/operations/create-channel.ts","kind":"dynamic-import","original":"./create-channel"},{"path":"src/operations/create-channel-thread.ts","kind":"dynamic-import","original":"./create-channel-thread"},{"path":"src/operations/create-proposals.ts","kind":"dynamic-import","original":"./create-proposals"},{"path":"src/operations/delete.ts","kind":"dynamic-import","original":"./delete"},{"path":"src/operations/delete-message.ts","kind":"dynamic-import","original":"./delete-message"},{"path":"src/operations/on-create-space.ts","kind":"dynamic-import","original":"./on-create-space"},{"path":"src/operations/restore.ts","kind":"dynamic-import","original":"./restore"},{"path":"src/operations/restore-message.ts","kind":"dynamic-import","original":"./restore-message"},{"path":"src/operations/select.ts","kind":"dynamic-import","original":"./select"},{"path":"src/operations/toggle-resolved.ts","kind":"dynamic-import","original":"./toggle-resolved"}],"format":"esm"}},"outputs":{"dist/lib/browser/create-proposals-CMK7S7VS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3592},"dist/lib/browser/create-proposals-CMK7S7VS.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Array","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"@dxos/assistant","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-db","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-proposals.ts","inputs":{"src/operations/create-proposals.ts":{"bytesInOutput":1525}},"bytes":1789},"dist/lib/browser/delete-FSFVU6ZA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3900},"dist/lib/browser/delete-FSFVU6ZA.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/delete.ts","inputs":{"src/operations/delete.ts":{"bytesInOutput":1482}},"bytes":1737},"dist/lib/browser/delete-message-XL5M5J33.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3252},"dist/lib/browser/delete-message-XL5M5J33.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/delete-message.ts","inputs":{"src/operations/delete-message.ts":{"bytesInOutput":1510}},"bytes":1776},"dist/lib/browser/on-create-space-VYS2JGVT.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1286},"dist/lib/browser/on-create-space-VYS2JGVT.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/on-create-space.ts","inputs":{"src/operations/on-create-space.ts":{"bytesInOutput":419}},"bytes":695},"dist/lib/browser/restore-2ZGMKUSD.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1940},"dist/lib/browser/restore-2ZGMKUSD.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/restore.ts","inputs":{"src/operations/restore.ts":{"bytesInOutput":700}},"bytes":929},"dist/lib/browser/restore-message-OYEGWPII.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2324},"dist/lib/browser/restore-message-OYEGWPII.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/restore-message.ts","inputs":{"src/operations/restore-message.ts":{"bytesInOutput":1083}},"bytes":1343},"dist/lib/browser/select-VG2XLULE.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1486},"dist/lib/browser/select-VG2XLULE.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/select.ts","inputs":{"src/operations/select.ts":{"bytesInOutput":530}},"bytes":785},"dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2209},"dist/lib/browser/toggle-resolved-MM6YC5BU.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/toggle-resolved.ts","inputs":{"src/operations/toggle-resolved.ts":{"bytesInOutput":1118}},"bytes":1378},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":138596},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"md5-hex","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/display-name","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/edge/messenger","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/calls_pb","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/types","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/types","kind":"import-statement","external":true},{"path":"@dxos/react-ui-thread","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"exports":["CALLS_URL","CallManager","CallSwarmSynchronizer","CallsServicePeer","MediaManager","SpeakingMonitor","THREAD_ITEM","ThreadCapabilities","ThreadPlugin","TrackNameCodec","codec","createBlackCanvasStreamTrack","createInaudibleAudioStreamTrack","getDeviceList","getScreenshare","getUserMediaTrack","meta","monitorAudioLevel","useBlackCanvasStreamTrack","useDebugMode","useInaudibleAudioStreamTrack","useOnEditAnalytics","useStatus","useVideoStreamTrack"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/calls/call-manager.ts":{"bytesInOutput":8253},"src/calls/call-swarm-synchronizer.ts":{"bytesInOutput":9715},"src/calls/types.ts":{"bytesInOutput":1318},"src/calls/media-manager.ts":{"bytesInOutput":12674},"src/calls/speaking-monitor.ts":{"bytesInOutput":2134},"src/calls/util/audio.ts":{"bytesInOutput":1264},"src/calls/util/index.ts":{"bytesInOutput":0},"src/calls/util/calls-service.ts":{"bytesInOutput":16623},"src/calls/util/history-cache.ts":{"bytesInOutput":325},"src/calls/util/task-scheduling.ts":{"bytesInOutput":1575},"src/calls/util/media.ts":{"bytesInOutput":1514},"src/calls/util/stub-media-streams.ts":{"bytesInOutput":3069},"src/calls/index.ts":{"bytesInOutput":0},"src/hooks/analytics.ts":{"bytesInOutput":891},"src/hooks/index.ts":{"bytesInOutput":0},"src/hooks/useBlackCanvasStreamTrack.tsx":{"bytesInOutput":830},"src/hooks/useDebugMode.ts":{"bytesInOutput":511},"src/hooks/useInaudibleAudioStreamTrack.tsx":{"bytesInOutput":791},"src/hooks/useStatus.ts":{"bytesInOutput":777},"src/hooks/useVideoStreamTrack.tsx":{"bytesInOutput":968},"src/meta.ts":{"bytesInOutput":492},"src/ThreadPlugin.tsx":{"bytesInOutput":4348},"src/translations.ts":{"bytesInOutput":3643}},"bytes":73169},"dist/lib/browser/blueprints/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1785},"dist/lib/browser/blueprints/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/blueprints","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"#operations","kind":"import-statement","external":true}],"exports":["ThreadBlueprint"],"entryPoint":"src/blueprints/index.ts","inputs":{"src/blueprints/thread-blueprint.ts":{"bytesInOutput":903},"src/blueprints/index.ts":{"bytesInOutput":0}},"bytes":1067},"dist/lib/browser/operations/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1167},"dist/lib/browser/operations/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"dist/lib/browser/add-message-VPPFFLFL.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-OQKG4S47.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-channel-EF67LCS6.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/create-proposals-CMK7S7VS.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/delete-FSFVU6ZA.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/delete-message-XL5M5J33.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/on-create-space-VYS2JGVT.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/restore-2ZGMKUSD.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/restore-message-OYEGWPII.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/select-VG2XLULE.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/toggle-resolved-MM6YC5BU.mjs","kind":"dynamic-import"}],"exports":["ThreadOperation","ThreadOperationHandlerSet"],"entryPoint":"src/operations/index.ts","inputs":{"src/operations/index.ts":{"bytesInOutput":667}},"bytes":939},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"}],"exports":["Channel","Settings","ThreadCapabilities"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":263},"dist/lib/browser/add-message-VPPFFLFL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5673},"dist/lib/browser/add-message-VPPFFLFL.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability/operations","kind":"import-statement","external":true},{"path":"@dxos/plugin-space/operations","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/add-message.ts","inputs":{"src/operations/add-message.ts":{"bytesInOutput":2603}},"bytes":2877},"dist/lib/browser/create-OQKG4S47.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3355},"dist/lib/browser/create-OQKG4S47.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-deck/operations","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create.ts","inputs":{"src/operations/create.ts":{"bytesInOutput":1384}},"bytes":1649},"dist/lib/browser/create-channel-EF67LCS6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":936},"dist/lib/browser/create-channel-EF67LCS6.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-channel.ts","inputs":{"src/operations/create-channel.ts":{"bytesInOutput":277}},"bytes":560},"dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1475},"dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VPM44Z35.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/operations/create-channel-thread.ts","inputs":{"src/operations/create-channel-thread.ts":{"bytesInOutput":515}},"bytes":798},"dist/lib/browser/chunk-VPM44Z35.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10132},"dist/lib/browser/chunk-VPM44Z35.mjs":{"imports":[{"path":"dist/lib/browser/chunk-MESW3R4Q.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown/types","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true}],"exports":["AddMessage","Create","CreateChannel","CreateChannelThread","CreateProposals","Delete","DeleteMessage","OnCreateSpace","Restore","RestoreMessage","Select","ToggleResolved","definitions_exports"],"inputs":{"src/operations/definitions.ts":{"bytesInOutput":5773}},"bytes":6179},"dist/lib/browser/chunk-MESW3R4Q.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4885},"dist/lib/browser/chunk-MESW3R4Q.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/types","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true}],"exports":["Channel_exports","Settings_exports","ThreadCapabilities"],"inputs":{"src/types/capabilities.ts":{"bytesInOutput":625},"src/types/index.ts":{"bytesInOutput":0},"src/types/Channel.ts":{"bytesInOutput":926},"src/types/Settings.ts":{"bytesInOutput":181},"src/types/types.ts":{"bytesInOutput":0}},"bytes":1981},"dist/lib/browser/chunk-J5LGTIGS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/chunk-J5LGTIGS.mjs":{"imports":[],"exports":["__export"],"inputs":{},"bytes":235}}}
@@ -1,25 +0,0 @@
1
- import {
2
- CreateChannel,
3
- OnCreateSpace
4
- } from "./chunk-VPM44Z35.mjs";
5
- import "./chunk-MESW3R4Q.mjs";
6
- import "./chunk-J5LGTIGS.mjs";
7
-
8
- // src/operations/on-create-space.ts
9
- import * as Effect from "effect/Effect";
10
- import { Operation } from "@dxos/operation";
11
- var handler = OnCreateSpace.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ space, isDefault }) {
12
- if (isDefault) {
13
- return;
14
- }
15
- const { object: channel } = yield* Operation.invoke(CreateChannel, {
16
- name: "General",
17
- spaceId: space.id
18
- });
19
- space.db.add(channel);
20
- })));
21
- var on_create_space_default = handler;
22
- export {
23
- on_create_space_default as default
24
- };
25
- //# sourceMappingURL=on-create-space-VYS2JGVT.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/operations/on-create-space.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/operation';\n\nimport { CreateChannel, OnCreateSpace } from './definitions';\n\nconst handler: Operation.WithHandler<typeof OnCreateSpace> = OnCreateSpace.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ space, isDefault }) {\n if (isDefault) {\n return;\n }\n\n const { object: channel } = yield* Operation.invoke(CreateChannel, {\n name: 'General',\n spaceId: space.id,\n });\n space.db.add(channel);\n }),\n ),\n);\n\nexport default handler;\n"],
5
- "mappings": ";;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAI1B,IAAMC,UAAuDC,cAAcC,KACzEC,UAAUC,YACDC,kBAAW,WAAW,EAAEC,OAAOC,UAAS,GAAE;AAC/C,MAAIA,WAAW;AACb;EACF;AAEA,QAAM,EAAEC,QAAQC,QAAO,IAAK,OAAON,UAAUO,OAAOC,eAAe;IACjEC,MAAM;IACNC,SAASP,MAAMQ;EACjB,CAAA;AACAR,QAAMS,GAAGC,IAAIP,OAAAA;AACf,CAAA,CAAA,CAAA;AAIJ,IAAA,0BAAeT;",
6
- "names": ["Effect", "Operation", "handler", "OnCreateSpace", "pipe", "Operation", "withHandler", "fnUntraced", "space", "isDefault", "object", "channel", "invoke", "CreateChannel", "name", "spaceId", "id", "db", "add"]
7
- }
@@ -1,14 +0,0 @@
1
- import {
2
- definitions_exports
3
- } from "../chunk-VPM44Z35.mjs";
4
- import "../chunk-MESW3R4Q.mjs";
5
- import "../chunk-J5LGTIGS.mjs";
6
-
7
- // src/operations/index.ts
8
- import { OperationHandlerSet } from "@dxos/operation";
9
- var ThreadOperationHandlerSet = OperationHandlerSet.lazy(() => import("../add-message-VPPFFLFL.mjs"), () => import("../create-OQKG4S47.mjs"), () => import("../create-channel-EF67LCS6.mjs"), () => import("../create-channel-thread-CCZTSWQ6.mjs"), () => import("../create-proposals-CMK7S7VS.mjs"), () => import("../delete-FSFVU6ZA.mjs"), () => import("../delete-message-XL5M5J33.mjs"), () => import("../on-create-space-VYS2JGVT.mjs"), () => import("../restore-2ZGMKUSD.mjs"), () => import("../restore-message-OYEGWPII.mjs"), () => import("../select-VG2XLULE.mjs"), () => import("../toggle-resolved-MM6YC5BU.mjs"));
10
- export {
11
- definitions_exports as ThreadOperation,
12
- ThreadOperationHandlerSet
13
- };
14
- //# sourceMappingURL=index.mjs.map