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