@dxos/plugin-thread 0.8.4-main.c1de068 → 0.8.4-main.c4373fc
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-BGDGZHV4.mjs +16 -0
- package/dist/lib/browser/ChatContainer-75KJZ4XR.mjs +15 -0
- package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-ODKIAXR7.mjs} +19 -19
- package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-BCKLI4QD.mjs} +7 -7
- package/dist/lib/browser/call-manager-BCKLI4QD.mjs.map +7 -0
- package/dist/lib/browser/chunk-2MUYQOQE.mjs +23 -0
- package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-2MUYQOQE.mjs.map} +3 -3
- package/dist/lib/browser/chunk-B7YQ7QR2.mjs +376 -0
- package/dist/lib/browser/chunk-B7YQ7QR2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-CMCVHULC.mjs} +235 -233
- package/dist/lib/browser/chunk-CMCVHULC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
- package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-HDEQRBOC.mjs} +38 -6
- package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-HDEQRBOC.mjs.map} +4 -4
- package/dist/lib/browser/chunk-L326LSNS.mjs +18 -0
- package/dist/lib/browser/chunk-L326LSNS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EV4JWI7L.mjs → chunk-T4KJ5JR4.mjs} +5 -7
- package/dist/lib/browser/chunk-T4KJ5JR4.mjs.map +7 -0
- package/dist/lib/browser/chunk-VJMKS4CZ.mjs +619 -0
- package/dist/lib/browser/chunk-VJMKS4CZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-VTYX3SIM.mjs} +26 -16
- package/dist/lib/browser/chunk-VTYX3SIM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-XYUJXHYV.mjs} +55 -5
- package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-ZCEU5K23.mjs} +461 -240
- package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +23 -14
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-VOQD3TQ2.mjs} +75 -17
- package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs.map +7 -0
- package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-R6MGRIA6.mjs} +7 -7
- package/dist/lib/browser/markdown-R6MGRIA6.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-UMSBTN6H.mjs +28 -0
- package/dist/lib/browser/react-root-UMSBTN6H.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-SXMQEWKE.mjs} +22 -22
- package/dist/lib/browser/react-surface-SXMQEWKE.mjs.map +7 -0
- package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-TCNF54PN.mjs} +5 -5
- package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-TCNF54PN.mjs.map} +1 -1
- package/dist/lib/browser/{state-H6CYONWE.mjs → state-ZQ4IPOJT.mjs} +5 -5
- package/dist/lib/browser/state-ZQ4IPOJT.mjs.map +7 -0
- package/dist/lib/browser/toolkit-JF4B4QIO.mjs +84 -0
- package/dist/lib/browser/toolkit-JF4B4QIO.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/ChannelContainer-OXC6BTU7.mjs +17 -0
- package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-SH6LTFQL.mjs} +6 -6
- package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-DMPT3MY6.mjs} +19 -19
- package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-Q7RY2YP4.mjs} +7 -7
- package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-2KZ4ODHU.mjs} +235 -233
- package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-2MMJF7DW.mjs} +38 -6
- package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-2V3WSLUZ.mjs} +55 -5
- package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
- package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-BAMZXJS4.mjs} +26 -16
- package/dist/lib/node-esm/chunk-BAMZXJS4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-BTGKI5IK.mjs +377 -0
- package/dist/lib/node-esm/chunk-BTGKI5IK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs +25 -0
- package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-GZ4WL2IS.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-LCHTNRK7.mjs +19 -0
- package/dist/lib/node-esm/chunk-LCHTNRK7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-NHSIAEDW.mjs +620 -0
- package/dist/lib/node-esm/chunk-NHSIAEDW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-GRLRWTRU.mjs → chunk-OBVAURUU.mjs} +5 -7
- package/dist/lib/node-esm/chunk-OBVAURUU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-TIPIOH2J.mjs} +461 -240
- package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +23 -14
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-AKVH66PH.mjs} +75 -17
- package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-MYGTDXT6.mjs} +7 -7
- package/dist/lib/node-esm/markdown-MYGTDXT6.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-root-W6AVTL5M.mjs +29 -0
- package/dist/lib/node-esm/react-root-W6AVTL5M.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-NLSZJGMO.mjs} +22 -22
- package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-ZQHGVFBY.mjs} +5 -5
- package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-ZQHGVFBY.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-FSLLJ5TZ.mjs} +5 -5
- package/dist/lib/node-esm/state-FSLLJ5TZ.mjs.map +7 -0
- package/dist/lib/node-esm/toolkit-DHPKJITO.mjs +85 -0
- package/dist/lib/node-esm/toolkit-DHPKJITO.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/ThreadPlugin.d.ts +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +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 +4 -2
- 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 +10 -9
- package/dist/types/src/calls-service.stories.d.ts.map +1 -1
- 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 +6 -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 -5
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +91 -5
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts +160 -4
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts +2 -2
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
- package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
- 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 +155 -3
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +157 -4
- 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/ThreadSettings.d.ts +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/command-extension.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 +1 -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/useVideoStreamTrack.d.ts +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +126 -109
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +259 -172
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +62 -58
- package/src/ThreadPlugin.tsx +130 -124
- package/src/calls/call-manager.ts +2 -2
- package/src/calls/call-swarm-synchronizer.ts +1 -1
- package/src/calls/media-manager.ts +60 -34
- package/src/calls/types.ts +8 -4
- package/src/calls/util/calls-service.ts +65 -14
- package/src/calls/util/stub-media-streams.ts +62 -5
- package/src/calls-service.stories.tsx +78 -65
- package/src/capabilities/app-graph-builder.ts +18 -14
- package/src/capabilities/call-manager.ts +3 -2
- package/src/capabilities/capabilities.ts +7 -7
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/intent-resolver.ts +43 -9
- package/src/capabilities/markdown.ts +4 -3
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +14 -13
- package/src/capabilities/state.ts +2 -1
- package/src/capabilities/toolkit.ts +82 -0
- package/src/components/Call/Call.tsx +3 -2
- package/src/components/Call/Toolbar.tsx +5 -5
- package/src/components/CallDebugPanel.tsx +108 -49
- package/src/components/CallSidebar.tsx +2 -1
- package/src/components/ChannelContainer.stories.tsx +11 -10
- package/src/components/ChannelContainer.tsx +8 -7
- package/src/components/Chat.stories.tsx +34 -31
- package/src/components/ChatContainer.tsx +8 -4
- package/src/components/Comments.stories.tsx +39 -38
- package/src/components/CommentsContainer.tsx +2 -1
- package/src/components/CommentsThreadContainer.tsx +9 -7
- package/src/components/Lobby/Lobby.tsx +1 -1
- package/src/components/Media/VideoObject.stories.tsx +36 -28
- package/src/components/MessageContainer.tsx +43 -9
- package/src/components/Participant/Participant.tsx +13 -7
- package/src/components/Participant/ParticipantGrid.tsx +2 -1
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +8 -8
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +44 -42
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
- package/src/components/ThreadComplementary.tsx +37 -7
- package/src/components/ThreadSettings.tsx +6 -7
- package/src/components/command-extension.ts +5 -2
- package/src/components/testing.ts +22 -0
- package/src/extensions/threads.ts +6 -6
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
- package/src/hooks/useDebugMode.ts +1 -1
- package/src/hooks/useVideoStreamTrack.tsx +6 -3
- package/src/meta.ts +3 -4
- package/src/testing/stories.ts +3 -3
- package/src/translations.ts +3 -1
- package/src/types/schema.ts +1 -1
- package/src/types/types.ts +22 -13
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/typings.d.ts +8 -0
- package/src/util.ts +1 -1
- package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
- package/dist/lib/browser/ChatContainer-AIGIWAUG.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
- package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
- package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
- package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
- package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
- package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
- package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
- package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
- package/dist/lib/browser/chunk-LGSDKXPF.mjs +0 -18
- package/dist/lib/browser/chunk-LGSDKXPF.mjs.map +0 -7
- package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
- package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
- package/dist/lib/browser/chunk-XLPJXUKO.mjs +0 -367
- package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
- package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
- package/dist/lib/browser/react-root-X4UIVGTX.mjs +0 -28
- package/dist/lib/browser/react-root-X4UIVGTX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
- package/dist/lib/browser/state-H6CYONWE.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-DET6T5N2.mjs +0 -17
- package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
- package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
- package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-75RJ5DJI.mjs +0 -19
- package/dist/lib/node-esm/chunk-75RJ5DJI.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
- package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
- package/dist/lib/node-esm/chunk-J4NSON5Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-M7J6PZVW.mjs +0 -29
- package/dist/lib/node-esm/react-root-M7J6PZVW.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
- package/dist/lib/node-esm/state-D7WNDT3N.mjs.map +0 -7
- /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-BGDGZHV4.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-75KJZ4XR.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-OXC6BTU7.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-SH6LTFQL.mjs.map} +0 -0
|
@@ -2,11 +2,13 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
import {
|
|
3
3
|
createBlackCanvasStreamTrack,
|
|
4
4
|
createInaudibleAudioStreamTrack
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2V3WSLUZ.mjs";
|
|
6
6
|
|
|
7
7
|
// src/calls/types.ts
|
|
8
|
+
import { invariant } from "@dxos/invariant";
|
|
8
9
|
import { buf } from "@dxos/protocols/buf";
|
|
9
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";
|
|
10
12
|
var CALLS_URL = "https://calls-service.dxos.workers.dev";
|
|
11
13
|
var codec = {
|
|
12
14
|
encode: (message) => {
|
|
@@ -18,14 +20,42 @@ var codec = {
|
|
|
18
20
|
};
|
|
19
21
|
var TrackNameCodec = {
|
|
20
22
|
encode: (trackData) => {
|
|
21
|
-
|
|
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;
|
|
22
51
|
},
|
|
23
52
|
decode: (name) => {
|
|
24
|
-
const [sessionId, trackName] = name.split("/");
|
|
53
|
+
const [sessionId, trackName, mid] = name.split("/");
|
|
25
54
|
return {
|
|
26
55
|
sessionId,
|
|
27
56
|
trackName,
|
|
28
|
-
location: "remote"
|
|
57
|
+
location: "remote",
|
|
58
|
+
mid
|
|
29
59
|
};
|
|
30
60
|
}
|
|
31
61
|
};
|
|
@@ -35,37 +65,35 @@ import md5Hex from "md5-hex";
|
|
|
35
65
|
import { DeferredTask, Event, scheduleTaskInterval, synchronized } from "@dxos/async";
|
|
36
66
|
import { Context, Resource } from "@dxos/context";
|
|
37
67
|
import { generateName } from "@dxos/display-name";
|
|
38
|
-
import { invariant } from "@dxos/invariant";
|
|
68
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
39
69
|
import { PublicKey } from "@dxos/keys";
|
|
40
70
|
import { log } from "@dxos/log";
|
|
41
71
|
import { buf as buf2 } from "@dxos/protocols/buf";
|
|
42
72
|
import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
|
|
43
73
|
import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
|
|
44
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
|
+
}
|
|
45
88
|
function _ts_decorate(decorators, target, key, desc) {
|
|
46
89
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
47
90
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
48
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;
|
|
49
92
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
50
93
|
}
|
|
51
|
-
var
|
|
94
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
|
|
52
95
|
var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
|
|
53
96
|
var CallSwarmSynchronizer = class extends Resource {
|
|
54
|
-
constructor({ networkService }) {
|
|
55
|
-
super();
|
|
56
|
-
this.stateUpdated = new Event();
|
|
57
|
-
this._state = {
|
|
58
|
-
activities: {}
|
|
59
|
-
};
|
|
60
|
-
this._lastSwarmEvent = void 0;
|
|
61
|
-
this._reconcileSwarmStateTask = void 0;
|
|
62
|
-
this._identityKey = void 0;
|
|
63
|
-
this._deviceKey = void 0;
|
|
64
|
-
this._displayName = void 0;
|
|
65
|
-
this._swarmCtx = void 0;
|
|
66
|
-
this._sendStateTask = void 0;
|
|
67
|
-
this._networkService = networkService;
|
|
68
|
-
}
|
|
69
97
|
/**
|
|
70
98
|
* @internal
|
|
71
99
|
*/
|
|
@@ -131,7 +159,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
131
159
|
log.verbose("joined to a different room", {
|
|
132
160
|
roomId
|
|
133
161
|
}, {
|
|
134
|
-
F:
|
|
162
|
+
F: __dxlog_file2,
|
|
135
163
|
L: 152,
|
|
136
164
|
S: this,
|
|
137
165
|
C: (f, a) => f(...a)
|
|
@@ -153,8 +181,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
153
181
|
this._reconcileSwarmStateTask = void 0;
|
|
154
182
|
}
|
|
155
183
|
async join() {
|
|
156
|
-
|
|
157
|
-
F:
|
|
184
|
+
invariant2(this._state.roomId, void 0, {
|
|
185
|
+
F: __dxlog_file2,
|
|
158
186
|
L: 176,
|
|
159
187
|
S: this,
|
|
160
188
|
A: [
|
|
@@ -162,8 +190,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
162
190
|
""
|
|
163
191
|
]
|
|
164
192
|
});
|
|
165
|
-
|
|
166
|
-
F:
|
|
193
|
+
invariant2(!this._swarmCtx, "Already joined", {
|
|
194
|
+
F: __dxlog_file2,
|
|
167
195
|
L: 177,
|
|
168
196
|
S: this,
|
|
169
197
|
A: [
|
|
@@ -172,7 +200,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
172
200
|
]
|
|
173
201
|
});
|
|
174
202
|
this._swarmCtx = new Context(void 0, {
|
|
175
|
-
F:
|
|
203
|
+
F: __dxlog_file2,
|
|
176
204
|
L: 179
|
|
177
205
|
});
|
|
178
206
|
const topic = getTopic(this._state.roomId);
|
|
@@ -183,7 +211,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
183
211
|
peerKey: this._deviceKey
|
|
184
212
|
}
|
|
185
213
|
}, {
|
|
186
|
-
F:
|
|
214
|
+
F: __dxlog_file2,
|
|
187
215
|
L: 181,
|
|
188
216
|
S: this,
|
|
189
217
|
C: (f, a) => f(...a)
|
|
@@ -202,7 +230,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
202
230
|
peerKey: this._deviceKey
|
|
203
231
|
}
|
|
204
232
|
}, {
|
|
205
|
-
F:
|
|
233
|
+
F: __dxlog_file2,
|
|
206
234
|
L: 188,
|
|
207
235
|
S: this,
|
|
208
236
|
C: (f, a) => f(...a)
|
|
@@ -214,7 +242,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
214
242
|
peerKey: this._deviceKey
|
|
215
243
|
}
|
|
216
244
|
}).catch((err) => log.catch(err, void 0, {
|
|
217
|
-
F:
|
|
245
|
+
F: __dxlog_file2,
|
|
218
246
|
L: 194,
|
|
219
247
|
S: this,
|
|
220
248
|
C: (f, a) => f(...a)
|
|
@@ -282,8 +310,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
282
310
|
}
|
|
283
311
|
async _reconcileSwarmState() {
|
|
284
312
|
const swarmEvent = this._lastSwarmEvent;
|
|
285
|
-
|
|
286
|
-
F:
|
|
313
|
+
invariant2(swarmEvent, void 0, {
|
|
314
|
+
F: __dxlog_file2,
|
|
287
315
|
L: 273,
|
|
288
316
|
S: this,
|
|
289
317
|
A: [
|
|
@@ -303,7 +331,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
303
331
|
error,
|
|
304
332
|
peer
|
|
305
333
|
}, {
|
|
306
|
-
F:
|
|
334
|
+
F: __dxlog_file2,
|
|
307
335
|
L: 290,
|
|
308
336
|
S: this,
|
|
309
337
|
C: (f, a) => f(...a)
|
|
@@ -316,7 +344,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
316
344
|
log("reconciling swarm state", {
|
|
317
345
|
users
|
|
318
346
|
}, {
|
|
319
|
-
F:
|
|
347
|
+
F: __dxlog_file2,
|
|
320
348
|
L: 297,
|
|
321
349
|
S: this,
|
|
322
350
|
C: (f, a) => f(...a)
|
|
@@ -339,6 +367,12 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
339
367
|
scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
|
|
340
368
|
}
|
|
341
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
|
+
}
|
|
342
376
|
};
|
|
343
377
|
_ts_decorate([
|
|
344
378
|
synchronized
|
|
@@ -404,17 +438,26 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
|
|
|
404
438
|
};
|
|
405
439
|
|
|
406
440
|
// src/calls/util/calls-service.ts
|
|
407
|
-
import { PersistentLifecycle } from "@dxos/async";
|
|
441
|
+
import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
|
|
408
442
|
import { Resource as Resource2 } from "@dxos/context";
|
|
409
|
-
import { invariant as
|
|
443
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
410
444
|
import { log as log2 } from "@dxos/log";
|
|
411
445
|
|
|
412
446
|
// src/calls/util/history-cache.ts
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
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;
|
|
417
457
|
}
|
|
458
|
+
return obj;
|
|
459
|
+
}
|
|
460
|
+
var HistoryCache = class {
|
|
418
461
|
push(...messages) {
|
|
419
462
|
if (this._messages.length >= this._limit) {
|
|
420
463
|
this._messages.shift();
|
|
@@ -424,53 +467,98 @@ var HistoryCache = class {
|
|
|
424
467
|
get() {
|
|
425
468
|
return this._messages;
|
|
426
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
|
+
}
|
|
427
476
|
};
|
|
428
477
|
|
|
429
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
|
+
}
|
|
430
519
|
var DefaultBatchSizeLimit = 64;
|
|
520
|
+
var _schedulerChain = /* @__PURE__ */ new WeakMap();
|
|
431
521
|
var FIFOScheduler = class {
|
|
432
|
-
#schedulerChain;
|
|
433
|
-
constructor() {
|
|
434
|
-
this.#schedulerChain = Promise.resolve();
|
|
435
|
-
}
|
|
436
522
|
schedule(task) {
|
|
437
523
|
return new Promise((resolve, reject) => {
|
|
438
|
-
this
|
|
524
|
+
_class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
|
|
439
525
|
try {
|
|
440
526
|
resolve(await task());
|
|
441
527
|
} catch (error) {
|
|
442
528
|
reject(error);
|
|
443
529
|
}
|
|
444
|
-
});
|
|
530
|
+
}));
|
|
445
531
|
});
|
|
446
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
|
+
}
|
|
447
540
|
};
|
|
541
|
+
var _currentBatch = /* @__PURE__ */ new WeakMap();
|
|
542
|
+
var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
|
|
543
|
+
var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
|
|
448
544
|
var BulkRequestDispatcher = class {
|
|
449
|
-
#currentBatch;
|
|
450
|
-
#currentBulkResponse;
|
|
451
|
-
#batchSizeLimit;
|
|
452
|
-
constructor(batchSizeLimit = DefaultBatchSizeLimit) {
|
|
453
|
-
this.#currentBatch = [];
|
|
454
|
-
this.#currentBulkResponse = null;
|
|
455
|
-
this.#batchSizeLimit = batchSizeLimit;
|
|
456
|
-
}
|
|
457
545
|
/**
|
|
458
546
|
* Returns a bulk response promise.
|
|
459
547
|
* At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
|
|
460
548
|
*/
|
|
461
549
|
doBulkRequest(params, bulkRequestFunc) {
|
|
462
|
-
if (this
|
|
463
|
-
this
|
|
464
|
-
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);
|
|
465
553
|
}
|
|
466
|
-
this
|
|
467
|
-
if (this
|
|
468
|
-
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);
|
|
469
557
|
}
|
|
470
|
-
const batch = this
|
|
471
|
-
this
|
|
558
|
+
const batch = _class_private_field_get(this, _currentBatch);
|
|
559
|
+
_class_private_field_set(this, _currentBulkResponse, new Promise((resolve, reject) => {
|
|
472
560
|
setTimeout(() => {
|
|
473
|
-
this
|
|
561
|
+
_class_private_field_set(this, _currentBulkResponse, null);
|
|
474
562
|
const batchCopy = batch.splice(0, batch.length);
|
|
475
563
|
bulkRequestFunc(batchCopy).then((result) => {
|
|
476
564
|
resolve(result);
|
|
@@ -478,28 +566,45 @@ var BulkRequestDispatcher = class {
|
|
|
478
566
|
reject(err);
|
|
479
567
|
});
|
|
480
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
|
|
481
576
|
});
|
|
482
|
-
|
|
577
|
+
_class_private_field_init(this, _currentBulkResponse, {
|
|
578
|
+
writable: true,
|
|
579
|
+
value: void 0
|
|
580
|
+
});
|
|
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);
|
|
483
588
|
}
|
|
484
589
|
};
|
|
485
590
|
|
|
486
591
|
// src/calls/util/calls-service.ts
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
start: () => this._startSession(),
|
|
495
|
-
stop: (session) => this._stopSession(session)
|
|
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
|
|
496
599
|
});
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
this.pullTrackDispatcher = new BulkRequestDispatcher(32);
|
|
500
|
-
this.closeTrackDispatcher = new BulkRequestDispatcher(32);
|
|
501
|
-
this._config = config;
|
|
600
|
+
} else {
|
|
601
|
+
obj[key] = value;
|
|
502
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 {
|
|
503
608
|
async _open(ctx) {
|
|
504
609
|
await this._persistentLifecycle.open(ctx);
|
|
505
610
|
}
|
|
@@ -527,11 +632,11 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
527
632
|
});
|
|
528
633
|
peerConnection.addEventListener("connectionstatechange", () => {
|
|
529
634
|
if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
|
|
530
|
-
log2.
|
|
635
|
+
log2.info("calls connection failed", {
|
|
531
636
|
state: peerConnection.connectionState
|
|
532
637
|
}, {
|
|
533
|
-
F:
|
|
534
|
-
L:
|
|
638
|
+
F: __dxlog_file3,
|
|
639
|
+
L: 121,
|
|
535
640
|
S: this,
|
|
536
641
|
C: (f, a) => f(...a)
|
|
537
642
|
});
|
|
@@ -542,11 +647,11 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
542
647
|
peerConnection.addEventListener("iceconnectionstatechange", () => {
|
|
543
648
|
clearTimeout(iceTimeout);
|
|
544
649
|
if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
|
|
545
|
-
log2.
|
|
650
|
+
log2.info("calls connection to ICEs failed", {
|
|
546
651
|
state: peerConnection.iceConnectionState
|
|
547
652
|
}, {
|
|
548
|
-
F:
|
|
549
|
-
L:
|
|
653
|
+
F: __dxlog_file3,
|
|
654
|
+
L: 130,
|
|
550
655
|
S: this,
|
|
551
656
|
C: (f, a) => f(...a)
|
|
552
657
|
});
|
|
@@ -556,19 +661,19 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
556
661
|
iceTimeout = window.setTimeout(() => {
|
|
557
662
|
if (peerConnection.iceConnectionState === "connected") {
|
|
558
663
|
log2.info("calls iceConnectionState is connected", void 0, {
|
|
559
|
-
F:
|
|
560
|
-
L:
|
|
664
|
+
F: __dxlog_file3,
|
|
665
|
+
L: 139,
|
|
561
666
|
S: this,
|
|
562
667
|
C: (f, a) => f(...a)
|
|
563
668
|
});
|
|
564
669
|
return;
|
|
565
670
|
}
|
|
566
|
-
log2.
|
|
671
|
+
log2.info("calls iceConnectionState timed out", {
|
|
567
672
|
state: peerConnection.iceConnectionState,
|
|
568
673
|
timeoutSeconds
|
|
569
674
|
}, {
|
|
570
|
-
F:
|
|
571
|
-
L:
|
|
675
|
+
F: __dxlog_file3,
|
|
676
|
+
L: 143,
|
|
572
677
|
S: this,
|
|
573
678
|
C: (f, a) => f(...a)
|
|
574
679
|
});
|
|
@@ -580,8 +685,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
580
685
|
}
|
|
581
686
|
async _initiateCallSession() {
|
|
582
687
|
log2("creating new session", void 0, {
|
|
583
|
-
F:
|
|
584
|
-
L:
|
|
688
|
+
F: __dxlog_file3,
|
|
689
|
+
L: 153,
|
|
585
690
|
S: this,
|
|
586
691
|
C: (f, a) => f(...a)
|
|
587
692
|
});
|
|
@@ -592,6 +697,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
592
697
|
}
|
|
593
698
|
async _fetch(relativePath, requestInit) {
|
|
594
699
|
this.history.push({
|
|
700
|
+
endpoint: relativePath,
|
|
595
701
|
type: "request",
|
|
596
702
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
597
703
|
method: requestInit?.method ?? "GET",
|
|
@@ -606,8 +712,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
606
712
|
status: response.status,
|
|
607
713
|
text: await response.text()
|
|
608
714
|
}, {
|
|
609
|
-
F:
|
|
610
|
-
L:
|
|
715
|
+
F: __dxlog_file3,
|
|
716
|
+
L: 169,
|
|
611
717
|
S: this,
|
|
612
718
|
C: (f, a) => f(...a)
|
|
613
719
|
});
|
|
@@ -616,6 +722,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
616
722
|
try {
|
|
617
723
|
const data = await response.clone().json();
|
|
618
724
|
this.history.push({
|
|
725
|
+
endpoint: relativePath,
|
|
619
726
|
type: "response",
|
|
620
727
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
621
728
|
status: response.status,
|
|
@@ -628,6 +735,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
628
735
|
} catch (error) {
|
|
629
736
|
const text = await response.text();
|
|
630
737
|
this.history.push({
|
|
738
|
+
endpoint: relativePath,
|
|
631
739
|
type: "response",
|
|
632
740
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
633
741
|
status: response.status,
|
|
@@ -638,8 +746,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
638
746
|
text,
|
|
639
747
|
status: response.status
|
|
640
748
|
}, {
|
|
641
|
-
F:
|
|
642
|
-
L:
|
|
749
|
+
F: __dxlog_file3,
|
|
750
|
+
L: 196,
|
|
643
751
|
S: this,
|
|
644
752
|
C: (f, a) => f(...a)
|
|
645
753
|
});
|
|
@@ -648,8 +756,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
648
756
|
}
|
|
649
757
|
async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
|
|
650
758
|
log2.verbose("pushing track ", trackName, {
|
|
651
|
-
F:
|
|
652
|
-
L:
|
|
759
|
+
F: __dxlog_file3,
|
|
760
|
+
L: 218,
|
|
653
761
|
S: this,
|
|
654
762
|
C: (f, a) => f(...a)
|
|
655
763
|
});
|
|
@@ -674,9 +782,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
674
782
|
}))
|
|
675
783
|
})
|
|
676
784
|
});
|
|
677
|
-
|
|
678
|
-
F:
|
|
679
|
-
L:
|
|
785
|
+
invariant3(response.tracks !== void 0, void 0, {
|
|
786
|
+
F: __dxlog_file3,
|
|
787
|
+
L: 243,
|
|
680
788
|
S: this,
|
|
681
789
|
A: [
|
|
682
790
|
"response.tracks !== undefined",
|
|
@@ -690,7 +798,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
690
798
|
return {
|
|
691
799
|
tracks: response.tracks
|
|
692
800
|
};
|
|
693
|
-
})).then(({ tracks }) => {
|
|
801
|
+
})).then(async ({ tracks }) => {
|
|
694
802
|
const trackData = tracks.find((t) => t.mid === transceiver.mid);
|
|
695
803
|
if (trackData) {
|
|
696
804
|
return {
|
|
@@ -700,19 +808,12 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
700
808
|
};
|
|
701
809
|
} else {
|
|
702
810
|
log2.error("missing track data", void 0, {
|
|
703
|
-
F:
|
|
704
|
-
L:
|
|
811
|
+
F: __dxlog_file3,
|
|
812
|
+
L: 267,
|
|
705
813
|
S: this,
|
|
706
814
|
C: (f, a) => f(...a)
|
|
707
815
|
});
|
|
708
816
|
}
|
|
709
|
-
}).catch((err) => {
|
|
710
|
-
log2.catch(err, void 0, {
|
|
711
|
-
F: __dxlog_file2,
|
|
712
|
-
L: 261,
|
|
713
|
-
S: this,
|
|
714
|
-
C: (f, a) => f(...a)
|
|
715
|
-
});
|
|
716
817
|
});
|
|
717
818
|
const onDispose = async () => {
|
|
718
819
|
if (transceiver.mid) {
|
|
@@ -725,9 +826,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
725
826
|
}
|
|
726
827
|
async pushTrack({ track, encodings = [], ctx, previousTrack }) {
|
|
727
828
|
await this.waitUntilOpen();
|
|
728
|
-
|
|
729
|
-
F:
|
|
730
|
-
L:
|
|
829
|
+
invariant3(this.session, void 0, {
|
|
830
|
+
F: __dxlog_file3,
|
|
831
|
+
L: 295,
|
|
731
832
|
S: this,
|
|
732
833
|
A: [
|
|
733
834
|
"this.session",
|
|
@@ -739,8 +840,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
739
840
|
previousTrack,
|
|
740
841
|
encodings
|
|
741
842
|
}, {
|
|
742
|
-
F:
|
|
743
|
-
L:
|
|
843
|
+
F: __dxlog_file3,
|
|
844
|
+
L: 296,
|
|
744
845
|
S: this,
|
|
745
846
|
C: (f, a) => f(...a)
|
|
746
847
|
});
|
|
@@ -752,8 +853,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
752
853
|
previousTrack,
|
|
753
854
|
transceiver: transceiver2
|
|
754
855
|
}, {
|
|
755
|
-
F:
|
|
756
|
-
L:
|
|
856
|
+
F: __dxlog_file3,
|
|
857
|
+
L: 300,
|
|
757
858
|
S: this,
|
|
758
859
|
C: (f, a) => f(...a)
|
|
759
860
|
});
|
|
@@ -764,23 +865,23 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
764
865
|
previousTrack,
|
|
765
866
|
transceiver: transceiver2
|
|
766
867
|
}, {
|
|
767
|
-
F:
|
|
768
|
-
L:
|
|
868
|
+
F: __dxlog_file3,
|
|
869
|
+
L: 303,
|
|
769
870
|
S: this,
|
|
770
871
|
C: (f, a) => f(...a)
|
|
771
872
|
});
|
|
772
873
|
transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
|
|
773
|
-
F:
|
|
774
|
-
L:
|
|
874
|
+
F: __dxlog_file3,
|
|
875
|
+
L: 304,
|
|
775
876
|
S: this,
|
|
776
877
|
C: (f, a) => f(...a)
|
|
777
878
|
}));
|
|
778
879
|
return previousTrack;
|
|
779
880
|
}
|
|
780
881
|
}
|
|
781
|
-
|
|
782
|
-
F:
|
|
783
|
-
L:
|
|
882
|
+
invariant3(track, void 0, {
|
|
883
|
+
F: __dxlog_file3,
|
|
884
|
+
L: 308,
|
|
784
885
|
S: this,
|
|
785
886
|
A: [
|
|
786
887
|
"track",
|
|
@@ -792,8 +893,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
792
893
|
direction: "sendonly"
|
|
793
894
|
});
|
|
794
895
|
log2.verbose("creating transceiver", void 0, {
|
|
795
|
-
F:
|
|
796
|
-
L:
|
|
896
|
+
F: __dxlog_file3,
|
|
897
|
+
L: 313,
|
|
797
898
|
S: this,
|
|
798
899
|
C: (f, a) => f(...a)
|
|
799
900
|
});
|
|
@@ -804,9 +905,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
804
905
|
sessionId: this.session.sessionId,
|
|
805
906
|
trackName: stableId
|
|
806
907
|
});
|
|
807
|
-
|
|
808
|
-
F:
|
|
809
|
-
L:
|
|
908
|
+
invariant3(pushedTrackData, void 0, {
|
|
909
|
+
F: __dxlog_file3,
|
|
910
|
+
L: 322,
|
|
810
911
|
S: this,
|
|
811
912
|
A: [
|
|
812
913
|
"pushedTrackData",
|
|
@@ -822,8 +923,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
822
923
|
};
|
|
823
924
|
});
|
|
824
925
|
transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
|
|
825
|
-
F:
|
|
826
|
-
L:
|
|
926
|
+
F: __dxlog_file3,
|
|
927
|
+
L: 329,
|
|
827
928
|
S: this,
|
|
828
929
|
C: (f, a) => f(...a)
|
|
829
930
|
}));
|
|
@@ -835,8 +936,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
835
936
|
log2("pulling track", {
|
|
836
937
|
trackName: trackData.trackName
|
|
837
938
|
}, {
|
|
838
|
-
F:
|
|
839
|
-
L:
|
|
939
|
+
F: __dxlog_file3,
|
|
940
|
+
L: 347,
|
|
840
941
|
S: this,
|
|
841
942
|
C: (f, a) => f(...a)
|
|
842
943
|
});
|
|
@@ -850,9 +951,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
850
951
|
if (newTrackResponse.errorCode) {
|
|
851
952
|
throw new Error(newTrackResponse.errorDescription);
|
|
852
953
|
}
|
|
853
|
-
|
|
854
|
-
F:
|
|
855
|
-
L:
|
|
954
|
+
invariant3(newTrackResponse.tracks, void 0, {
|
|
955
|
+
F: __dxlog_file3,
|
|
956
|
+
L: 360,
|
|
856
957
|
S: this,
|
|
857
958
|
A: [
|
|
858
959
|
"newTrackResponse.tracks",
|
|
@@ -898,18 +999,18 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
898
999
|
mid = trackInfo.mid;
|
|
899
1000
|
return track;
|
|
900
1001
|
}).catch((err) => log2.catch(err, void 0, {
|
|
901
|
-
F:
|
|
902
|
-
L:
|
|
1002
|
+
F: __dxlog_file3,
|
|
1003
|
+
L: 412,
|
|
903
1004
|
S: this,
|
|
904
1005
|
C: (f, a) => f(...a)
|
|
905
1006
|
}));
|
|
906
1007
|
} else {
|
|
907
|
-
log2.
|
|
1008
|
+
log2.info("missing track info", {
|
|
908
1009
|
trackData,
|
|
909
1010
|
availableTracks: Array.from(trackMap.keys())
|
|
910
1011
|
}, {
|
|
911
|
-
F:
|
|
912
|
-
L:
|
|
1012
|
+
F: __dxlog_file3,
|
|
1013
|
+
L: 414,
|
|
913
1014
|
S: this,
|
|
914
1015
|
C: (f, a) => f(...a)
|
|
915
1016
|
});
|
|
@@ -918,8 +1019,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
918
1019
|
const onDispose = async () => {
|
|
919
1020
|
if (mid) {
|
|
920
1021
|
log2("closing pulled track ", trackData.trackName, {
|
|
921
|
-
F:
|
|
922
|
-
L:
|
|
1022
|
+
F: __dxlog_file3,
|
|
1023
|
+
L: 420,
|
|
923
1024
|
S: this,
|
|
924
1025
|
C: (f, a) => f(...a)
|
|
925
1026
|
});
|
|
@@ -933,9 +1034,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
933
1034
|
}
|
|
934
1035
|
async pullTrack({ ctx, trackData }) {
|
|
935
1036
|
await this.waitUntilOpen();
|
|
936
|
-
|
|
937
|
-
F:
|
|
938
|
-
L:
|
|
1037
|
+
invariant3(this.session, void 0, {
|
|
1038
|
+
F: __dxlog_file3,
|
|
1039
|
+
L: 441,
|
|
939
1040
|
S: this,
|
|
940
1041
|
A: [
|
|
941
1042
|
"this.session",
|
|
@@ -987,6 +1088,13 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
987
1088
|
}
|
|
988
1089
|
}));
|
|
989
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
|
+
}
|
|
990
1098
|
};
|
|
991
1099
|
var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
|
|
992
1100
|
setTimeout(reject, timeout);
|
|
@@ -1021,9 +1129,9 @@ var peerConnectionIsConnected = async (peerConnection) => {
|
|
|
1021
1129
|
|
|
1022
1130
|
// src/calls/util/media.ts
|
|
1023
1131
|
import { log as log3 } from "@dxos/log";
|
|
1024
|
-
var
|
|
1132
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
|
|
1025
1133
|
var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
|
|
1026
|
-
deviceList
|
|
1134
|
+
deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
|
|
1027
1135
|
const firstDevice = deviceList[0];
|
|
1028
1136
|
if (!firstDevice) {
|
|
1029
1137
|
throw new Error("No devices found");
|
|
@@ -1033,7 +1141,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
|
|
|
1033
1141
|
var acquireTrack = async (device, constraints) => {
|
|
1034
1142
|
const { deviceId, label } = device;
|
|
1035
1143
|
log3.info(`requesting ${label}`, void 0, {
|
|
1036
|
-
F:
|
|
1144
|
+
F: __dxlog_file4,
|
|
1037
1145
|
L: 23,
|
|
1038
1146
|
S: void 0,
|
|
1039
1147
|
C: (f, a) => f(...a)
|
|
@@ -1078,14 +1186,24 @@ var getScreenshare = async ({ contentHint }) => {
|
|
|
1078
1186
|
// src/calls/speaking-monitor.ts
|
|
1079
1187
|
import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
|
|
1080
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
|
+
}
|
|
1081
1202
|
var NOT_SPEAKING_AFTER = 500;
|
|
1082
1203
|
var START_SPEAKING_THRESHOLD = 0.05;
|
|
1083
1204
|
var CONTINUE_SPEAKING_THRESHOLD = 0.02;
|
|
1084
1205
|
var MIN_EVENT_INTERVAL = 100;
|
|
1085
1206
|
var SpeakingMonitor = class extends Resource3 {
|
|
1086
|
-
constructor(_mediaStreamTrack) {
|
|
1087
|
-
super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
|
|
1088
|
-
}
|
|
1089
1207
|
get isSpeaking() {
|
|
1090
1208
|
return this._isSpeaking;
|
|
1091
1209
|
}
|
|
@@ -1129,40 +1247,50 @@ var SpeakingMonitor = class extends Resource3 {
|
|
|
1129
1247
|
this._lastEventTime = Date.now();
|
|
1130
1248
|
this.speakingChanged.emit(this._isSpeaking);
|
|
1131
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
|
+
}
|
|
1132
1260
|
};
|
|
1133
1261
|
|
|
1134
1262
|
// src/calls/media-manager.ts
|
|
1135
1263
|
import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
|
|
1136
|
-
import {
|
|
1264
|
+
import { Resource as Resource4, cancelWithContext } from "@dxos/context";
|
|
1265
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
1137
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
|
+
}
|
|
1138
1280
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
1139
1281
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1140
1282
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1141
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;
|
|
1142
1284
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1143
1285
|
}
|
|
1144
|
-
var
|
|
1286
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
|
|
1145
1287
|
var VIDEO_WIDTH = 1280;
|
|
1146
1288
|
var VIDEO_HEIGHT = 720;
|
|
1147
1289
|
var MAX_WEB_CAM_FRAMERATE = 24;
|
|
1148
1290
|
var MAX_WEB_CAM_BITRATE = 12e5;
|
|
1149
|
-
var RETRY_INTERVAL =
|
|
1150
|
-
var USE_INAUDIBLE_AUDIO =
|
|
1291
|
+
var RETRY_INTERVAL = 100;
|
|
1292
|
+
var USE_INAUDIBLE_AUDIO = true;
|
|
1151
1293
|
var MediaManager = class extends Resource4 {
|
|
1152
|
-
constructor() {
|
|
1153
|
-
super(...arguments);
|
|
1154
|
-
this.stateUpdated = new Event3();
|
|
1155
|
-
this._state = {
|
|
1156
|
-
pulledVideoStreams: {},
|
|
1157
|
-
pulledAudioTracks: {}
|
|
1158
|
-
};
|
|
1159
|
-
this._speakingMonitor = void 0;
|
|
1160
|
-
this._trackToReconcile = [];
|
|
1161
|
-
this._blackCanvasStreamTrack = void 0;
|
|
1162
|
-
this._inaudibleAudioStreamTrack = void 0;
|
|
1163
|
-
this._pushTracksTask = void 0;
|
|
1164
|
-
this._pullTracksTask = void 0;
|
|
1165
|
-
}
|
|
1166
1294
|
get isSpeaking() {
|
|
1167
1295
|
return this._speakingMonitor?.isSpeaking;
|
|
1168
1296
|
}
|
|
@@ -1301,8 +1429,8 @@ var MediaManager = class extends Resource4 {
|
|
|
1301
1429
|
}
|
|
1302
1430
|
async _reconcilePulledMedia() {
|
|
1303
1431
|
log4("reconciling tracks", void 0, {
|
|
1304
|
-
F:
|
|
1305
|
-
L:
|
|
1432
|
+
F: __dxlog_file5,
|
|
1433
|
+
L: 223,
|
|
1306
1434
|
S: this,
|
|
1307
1435
|
C: (f, a) => f(...a)
|
|
1308
1436
|
});
|
|
@@ -1319,12 +1447,12 @@ var MediaManager = class extends Resource4 {
|
|
|
1319
1447
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
1320
1448
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
|
|
1321
1449
|
}, {
|
|
1322
|
-
F:
|
|
1323
|
-
L:
|
|
1450
|
+
F: __dxlog_file5,
|
|
1451
|
+
L: 242,
|
|
1324
1452
|
S: this,
|
|
1325
1453
|
C: (f, a) => f(...a)
|
|
1326
1454
|
});
|
|
1327
|
-
await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
|
|
1455
|
+
const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
|
|
1328
1456
|
await Promise.all([
|
|
1329
1457
|
...audioTracksToClose,
|
|
1330
1458
|
...videoStreamsToClose
|
|
@@ -1333,55 +1461,102 @@ var MediaManager = class extends Resource4 {
|
|
|
1333
1461
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
1334
1462
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
|
|
1335
1463
|
}, {
|
|
1336
|
-
F:
|
|
1337
|
-
L:
|
|
1464
|
+
F: __dxlog_file5,
|
|
1465
|
+
L: 257,
|
|
1338
1466
|
S: this,
|
|
1339
1467
|
C: (f, a) => f(...a)
|
|
1340
1468
|
});
|
|
1341
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
|
+
}
|
|
1342
1491
|
}
|
|
1343
1492
|
async _pushTracks() {
|
|
1344
1493
|
if (!this._state.peer?.isOpen) {
|
|
1345
1494
|
return;
|
|
1346
1495
|
}
|
|
1347
1496
|
let updated = false;
|
|
1348
|
-
const [
|
|
1349
|
-
this.
|
|
1497
|
+
const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
|
|
1498
|
+
this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
|
|
1350
1499
|
{
|
|
1351
1500
|
maxFramerate: MAX_WEB_CAM_FRAMERATE,
|
|
1352
1501
|
maxBitrate: MAX_WEB_CAM_BITRATE
|
|
1353
1502
|
}
|
|
1354
1503
|
]),
|
|
1355
|
-
this.
|
|
1504
|
+
this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
|
|
1356
1505
|
{
|
|
1357
1506
|
networkPriority: "high"
|
|
1358
1507
|
}
|
|
1359
1508
|
]),
|
|
1360
|
-
this.
|
|
1509
|
+
this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
|
|
1361
1510
|
]);
|
|
1362
|
-
if (
|
|
1363
|
-
this._state.pushedVideoTrack =
|
|
1511
|
+
if (pushVideoResult.track !== this._state.pushedVideoTrack) {
|
|
1512
|
+
this._state.pushedVideoTrack = pushVideoResult.track;
|
|
1364
1513
|
updated = true;
|
|
1365
1514
|
}
|
|
1366
|
-
if (
|
|
1367
|
-
this._state.pushedAudioTrack =
|
|
1515
|
+
if (pushAudioResult.track !== this._state.pushedAudioTrack) {
|
|
1516
|
+
this._state.pushedAudioTrack = pushAudioResult.track;
|
|
1368
1517
|
updated = true;
|
|
1369
1518
|
}
|
|
1370
|
-
if (
|
|
1371
|
-
this._state.pushedScreenshareTrack =
|
|
1519
|
+
if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
|
|
1520
|
+
this._state.pushedScreenshareTrack = pushScreenshareResult.track;
|
|
1372
1521
|
updated = true;
|
|
1373
1522
|
}
|
|
1374
|
-
|
|
1375
|
-
|
|
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();
|
|
1376
1549
|
}
|
|
1377
|
-
this.stateUpdated.emit(this._state);
|
|
1378
1550
|
}
|
|
1379
1551
|
async _pullTrack(name) {
|
|
1380
1552
|
const ctx = this._ctx.derive();
|
|
1381
1553
|
try {
|
|
1382
1554
|
const trackData = TrackNameCodec.decode(name);
|
|
1383
1555
|
const track = await this._state.peer.pullTrack({
|
|
1384
|
-
trackData
|
|
1556
|
+
trackData: {
|
|
1557
|
+
...trackData,
|
|
1558
|
+
mid: void 0
|
|
1559
|
+
},
|
|
1385
1560
|
ctx
|
|
1386
1561
|
});
|
|
1387
1562
|
if (track?.readyState === "ended") {
|
|
@@ -1394,7 +1569,9 @@ var MediaManager = class extends Resource4 {
|
|
|
1394
1569
|
ctx
|
|
1395
1570
|
};
|
|
1396
1571
|
ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
|
|
1397
|
-
|
|
1572
|
+
return {
|
|
1573
|
+
shouldRetry: false
|
|
1574
|
+
};
|
|
1398
1575
|
}
|
|
1399
1576
|
case "video": {
|
|
1400
1577
|
const mediaStream = new MediaStream();
|
|
@@ -1408,43 +1585,68 @@ var MediaManager = class extends Resource4 {
|
|
|
1408
1585
|
track.stop();
|
|
1409
1586
|
delete this._state.pulledVideoStreams[name];
|
|
1410
1587
|
});
|
|
1411
|
-
|
|
1588
|
+
return {
|
|
1589
|
+
shouldRetry: false
|
|
1590
|
+
};
|
|
1412
1591
|
}
|
|
1413
1592
|
default:
|
|
1414
1593
|
throw new Error(`Invalid track kind: ${track?.kind}`);
|
|
1415
1594
|
}
|
|
1416
1595
|
} catch (err) {
|
|
1417
|
-
log4.
|
|
1596
|
+
log4.info("failed to pull track", {
|
|
1418
1597
|
err,
|
|
1419
1598
|
name
|
|
1420
1599
|
}, {
|
|
1421
|
-
F:
|
|
1422
|
-
L:
|
|
1600
|
+
F: __dxlog_file5,
|
|
1601
|
+
L: 343,
|
|
1423
1602
|
S: this,
|
|
1424
1603
|
C: (f, a) => f(...a)
|
|
1425
1604
|
});
|
|
1426
1605
|
void ctx.dispose();
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
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
|
|
1430
1633
|
}, {
|
|
1431
|
-
F:
|
|
1432
|
-
L:
|
|
1634
|
+
F: __dxlog_file5,
|
|
1635
|
+
L: 370,
|
|
1433
1636
|
S: this,
|
|
1434
1637
|
C: (f, a) => f(...a)
|
|
1435
1638
|
});
|
|
1436
|
-
|
|
1639
|
+
void ctx.dispose();
|
|
1640
|
+
return {
|
|
1641
|
+
shouldRetry: true
|
|
1642
|
+
};
|
|
1437
1643
|
}
|
|
1438
1644
|
}
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
track: track ?? null,
|
|
1445
|
-
previousTrack,
|
|
1446
|
-
encodings
|
|
1447
|
-
});
|
|
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);
|
|
1448
1650
|
}
|
|
1449
1651
|
};
|
|
1450
1652
|
_ts_decorate2([
|
|
@@ -1458,16 +1660,29 @@ _ts_decorate2([
|
|
|
1458
1660
|
import { computed } from "@preact/signals-core";
|
|
1459
1661
|
import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
|
|
1460
1662
|
import { Resource as Resource5 } from "@dxos/context";
|
|
1461
|
-
import { invariant as
|
|
1663
|
+
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1462
1664
|
import { live } from "@dxos/live-object";
|
|
1463
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
|
+
}
|
|
1464
1679
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
1465
1680
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1466
1681
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1467
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;
|
|
1468
1683
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1469
1684
|
}
|
|
1470
|
-
var
|
|
1685
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
|
|
1471
1686
|
var CallManager = class extends Resource5 {
|
|
1472
1687
|
/** @reactive */
|
|
1473
1688
|
get roomId() {
|
|
@@ -1547,31 +1762,6 @@ var CallManager = class extends Resource5 {
|
|
|
1547
1762
|
turnScreenshareOff() {
|
|
1548
1763
|
return this._mediaManager.turnScreenshareOff();
|
|
1549
1764
|
}
|
|
1550
|
-
// TODO(burdon): Can this be mocked?
|
|
1551
|
-
constructor(_client) {
|
|
1552
|
-
super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
|
|
1553
|
-
call: {},
|
|
1554
|
-
media: {
|
|
1555
|
-
pulledAudioTracks: {},
|
|
1556
|
-
pulledVideoStreams: {}
|
|
1557
|
-
}
|
|
1558
|
-
}), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
|
|
1559
|
-
this._client.config.getOrThrow("runtime.services.edge.url");
|
|
1560
|
-
const networkService = this._client.services.services.NetworkService;
|
|
1561
|
-
invariant3(networkService, "network service not found", {
|
|
1562
|
-
F: __dxlog_file5,
|
|
1563
|
-
L: 159,
|
|
1564
|
-
S: this,
|
|
1565
|
-
A: [
|
|
1566
|
-
"networkService",
|
|
1567
|
-
"'network service not found'"
|
|
1568
|
-
]
|
|
1569
|
-
});
|
|
1570
|
-
this._swarmSynchronizer = new CallSwarmSynchronizer({
|
|
1571
|
-
networkService
|
|
1572
|
-
});
|
|
1573
|
-
this._mediaManager = new MediaManager();
|
|
1574
|
-
}
|
|
1575
1765
|
async _open() {
|
|
1576
1766
|
await this._mediaManager.open();
|
|
1577
1767
|
await this._swarmSynchronizer.open();
|
|
@@ -1612,7 +1802,7 @@ var CallManager = class extends Resource5 {
|
|
|
1612
1802
|
this.roomId && this.left.emit(this.roomId);
|
|
1613
1803
|
}
|
|
1614
1804
|
_onCallStateUpdated(state) {
|
|
1615
|
-
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) => [
|
|
1616
1806
|
user.tracks?.video,
|
|
1617
1807
|
user.tracks?.audio,
|
|
1618
1808
|
user.tracks?.screenshare
|
|
@@ -1645,6 +1835,37 @@ var CallManager = class extends Resource5 {
|
|
|
1645
1835
|
this._state.call = this._swarmSynchronizer._getState();
|
|
1646
1836
|
this._state.media = this._mediaManager._getState();
|
|
1647
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
|
+
}
|
|
1648
1869
|
};
|
|
1649
1870
|
_ts_decorate3([
|
|
1650
1871
|
synchronized3
|
|
@@ -1667,4 +1888,4 @@ export {
|
|
|
1667
1888
|
MediaManager,
|
|
1668
1889
|
CallManager
|
|
1669
1890
|
};
|
|
1670
|
-
//# sourceMappingURL=chunk-
|
|
1891
|
+
//# sourceMappingURL=chunk-TIPIOH2J.mjs.map
|