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