@dxos/plugin-thread 0.8.4-main.c1de068 → 0.8.4-main.dedc0f3
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-AIGIWAUG.mjs → ChatContainer-EXNNREYB.mjs} +4 -4
- package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-FHAOPO57.mjs} +5 -5
- package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-RMPTWSTF.mjs} +4 -4
- package/dist/lib/browser/call-manager-RMPTWSTF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
- package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-7W7QK5ZP.mjs} +232 -230
- package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +7 -0
- package/dist/lib/browser/chunk-G4CNILRR.mjs +23 -0
- package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-G4CNILRR.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-KTWYVC5X.mjs} +22 -12
- package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
- package/dist/lib/browser/chunk-PBMNFG3B.mjs +376 -0
- package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-RI3Z6MK3.mjs} +38 -6
- package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-RI3Z6MK3.mjs.map} +4 -4
- 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/chunk-ZH2WPTNP.mjs +618 -0
- package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +20 -9
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-J7OCP2P6.mjs} +67 -9
- package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +7 -0
- package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-Z677YORA.mjs} +4 -4
- package/dist/lib/browser/markdown-Z677YORA.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-X4UIVGTX.mjs → react-root-XKOD4KRB.mjs} +9 -9
- package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-GVGZRBDK.mjs} +9 -9
- package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +7 -0
- package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-GRKEID73.mjs} +2 -2
- package/dist/lib/browser/{state-H6CYONWE.mjs → state-2T4KDWBX.mjs} +2 -2
- package/dist/lib/browser/{state-H6CYONWE.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 +1 -1
- package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs → ChannelContainer-KQQEZWUN.mjs} +7 -7
- package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-QVQKFBWA.mjs} +4 -4
- package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-XEYWX5FC.mjs} +5 -5
- package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-QAREJFVX.mjs} +4 -4
- package/dist/lib/node-esm/call-manager-QAREJFVX.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-4T45PCKP.mjs +25 -0
- package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-4T45PCKP.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-DKCQCENK.mjs +377 -0
- package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-JNPKMT7O.mjs} +38 -6
- package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LE2LIYGX.mjs +619 -0
- package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-P6E247RF.mjs} +22 -12
- package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-SNKFZQST.mjs} +232 -230
- package/dist/lib/node-esm/chunk-SNKFZQST.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 +20 -9
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-SR2LW4HF.mjs} +67 -9
- package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-FL4IXLRP.mjs} +4 -4
- 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-M7J6PZVW.mjs → react-root-4JWDRIQB.mjs} +9 -9
- package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-WLQUVRAX.mjs} +9 -9
- package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-F2ODVNNW.mjs} +2 -2
- package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-62TQKQVB.mjs} +2 -2
- package/dist/lib/node-esm/{state-D7WNDT3N.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 +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 -8
- 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 +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 +88 -3
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +90 -4
- 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 +156 -3
- 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 +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/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.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 +123 -108
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +255 -170
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +54 -50
- package/src/ThreadPlugin.tsx +9 -2
- 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 +76 -60
- 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 +38 -4
- 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 +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 +6 -5
- package/src/components/ChannelContainer.tsx +7 -6
- package/src/components/Chat.stories.tsx +28 -26
- package/src/components/ChatContainer.tsx +8 -4
- package/src/components/Comments.stories.tsx +33 -29
- 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 +30 -27
- 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 +6 -5
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
- package/src/components/ThreadComplementary.tsx +38 -8
- package/src/components/ThreadSettings.tsx +2 -2
- 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 +5 -2
- package/src/testing/stories.ts +2 -2
- package/src/translations.ts +3 -1
- package/src/types/types.ts +21 -12
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/typings.d.ts +8 -0
- package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
- 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-GCLD5ESP.mjs.map +0 -7
- package/dist/lib/browser/chunk-KWPRNHTK.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-surface-YCYEFBPM.mjs.map +0 -7
- 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-C3XFMUAY.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-surface-IRSEKM42.mjs.map +0 -7
- /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-4PYFOIDK.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-EXNNREYB.mjs.map} +0 -0
- /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-XKOD4KRB.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-GRKEID73.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-KQQEZWUN.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-QVQKFBWA.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-4JWDRIQB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createBlackCanvasStreamTrack,
|
|
3
3
|
createInaudibleAudioStreamTrack
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XYUJXHYV.mjs";
|
|
5
5
|
|
|
6
6
|
// src/calls/types.ts
|
|
7
|
+
import { invariant } from "@dxos/invariant";
|
|
7
8
|
import { buf } from "@dxos/protocols/buf";
|
|
8
9
|
import { UserStateSchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
|
|
10
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/types.ts";
|
|
9
11
|
var CALLS_URL = "https://calls-service.dxos.workers.dev";
|
|
10
12
|
var codec = {
|
|
11
13
|
encode: (message) => {
|
|
@@ -17,14 +19,42 @@ var codec = {
|
|
|
17
19
|
};
|
|
18
20
|
var TrackNameCodec = {
|
|
19
21
|
encode: (trackData) => {
|
|
20
|
-
|
|
22
|
+
invariant(trackData.sessionId, void 0, {
|
|
23
|
+
F: __dxlog_file,
|
|
24
|
+
L: 65,
|
|
25
|
+
S: void 0,
|
|
26
|
+
A: [
|
|
27
|
+
"trackData.sessionId",
|
|
28
|
+
""
|
|
29
|
+
]
|
|
30
|
+
});
|
|
31
|
+
invariant(trackData.trackName, void 0, {
|
|
32
|
+
F: __dxlog_file,
|
|
33
|
+
L: 66,
|
|
34
|
+
S: void 0,
|
|
35
|
+
A: [
|
|
36
|
+
"trackData.trackName",
|
|
37
|
+
""
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
invariant(trackData.mid, void 0, {
|
|
41
|
+
F: __dxlog_file,
|
|
42
|
+
L: 67,
|
|
43
|
+
S: void 0,
|
|
44
|
+
A: [
|
|
45
|
+
"trackData.mid",
|
|
46
|
+
""
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
return trackData.sessionId + "/" + trackData.trackName + "/" + trackData.mid;
|
|
21
50
|
},
|
|
22
51
|
decode: (name) => {
|
|
23
|
-
const [sessionId, trackName] = name.split("/");
|
|
52
|
+
const [sessionId, trackName, mid] = name.split("/");
|
|
24
53
|
return {
|
|
25
54
|
sessionId,
|
|
26
55
|
trackName,
|
|
27
|
-
location: "remote"
|
|
56
|
+
location: "remote",
|
|
57
|
+
mid
|
|
28
58
|
};
|
|
29
59
|
}
|
|
30
60
|
};
|
|
@@ -34,37 +64,35 @@ import md5Hex from "md5-hex";
|
|
|
34
64
|
import { DeferredTask, Event, scheduleTaskInterval, synchronized } from "@dxos/async";
|
|
35
65
|
import { Context, Resource } from "@dxos/context";
|
|
36
66
|
import { generateName } from "@dxos/display-name";
|
|
37
|
-
import { invariant } from "@dxos/invariant";
|
|
67
|
+
import { invariant as invariant2 } from "@dxos/invariant";
|
|
38
68
|
import { PublicKey } from "@dxos/keys";
|
|
39
69
|
import { log } from "@dxos/log";
|
|
40
70
|
import { buf as buf2 } from "@dxos/protocols/buf";
|
|
41
71
|
import { ActivitySchema } from "@dxos/protocols/buf/dxos/edge/calls_pb";
|
|
42
72
|
import { ConnectionState } from "@dxos/protocols/proto/dxos/edge/messenger";
|
|
43
73
|
import { isNonNullable } from "@dxos/util";
|
|
74
|
+
function _define_property(obj, key, value) {
|
|
75
|
+
if (key in obj) {
|
|
76
|
+
Object.defineProperty(obj, key, {
|
|
77
|
+
value,
|
|
78
|
+
enumerable: true,
|
|
79
|
+
configurable: true,
|
|
80
|
+
writable: true
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
obj[key] = value;
|
|
84
|
+
}
|
|
85
|
+
return obj;
|
|
86
|
+
}
|
|
44
87
|
function _ts_decorate(decorators, target, key, desc) {
|
|
45
88
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
46
89
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
47
90
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
48
91
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
49
92
|
}
|
|
50
|
-
var
|
|
93
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-swarm-synchronizer.ts";
|
|
51
94
|
var DISCONNECTED_ABRUPT_TIMEOUT = 1e4;
|
|
52
95
|
var CallSwarmSynchronizer = class extends Resource {
|
|
53
|
-
constructor({ networkService }) {
|
|
54
|
-
super();
|
|
55
|
-
this.stateUpdated = new Event();
|
|
56
|
-
this._state = {
|
|
57
|
-
activities: {}
|
|
58
|
-
};
|
|
59
|
-
this._lastSwarmEvent = void 0;
|
|
60
|
-
this._reconcileSwarmStateTask = void 0;
|
|
61
|
-
this._identityKey = void 0;
|
|
62
|
-
this._deviceKey = void 0;
|
|
63
|
-
this._displayName = void 0;
|
|
64
|
-
this._swarmCtx = void 0;
|
|
65
|
-
this._sendStateTask = void 0;
|
|
66
|
-
this._networkService = networkService;
|
|
67
|
-
}
|
|
68
96
|
/**
|
|
69
97
|
* @internal
|
|
70
98
|
*/
|
|
@@ -130,7 +158,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
130
158
|
log.verbose("joined to a different room", {
|
|
131
159
|
roomId
|
|
132
160
|
}, {
|
|
133
|
-
F:
|
|
161
|
+
F: __dxlog_file2,
|
|
134
162
|
L: 152,
|
|
135
163
|
S: this,
|
|
136
164
|
C: (f, a) => f(...a)
|
|
@@ -152,8 +180,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
152
180
|
this._reconcileSwarmStateTask = void 0;
|
|
153
181
|
}
|
|
154
182
|
async join() {
|
|
155
|
-
|
|
156
|
-
F:
|
|
183
|
+
invariant2(this._state.roomId, void 0, {
|
|
184
|
+
F: __dxlog_file2,
|
|
157
185
|
L: 176,
|
|
158
186
|
S: this,
|
|
159
187
|
A: [
|
|
@@ -161,8 +189,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
161
189
|
""
|
|
162
190
|
]
|
|
163
191
|
});
|
|
164
|
-
|
|
165
|
-
F:
|
|
192
|
+
invariant2(!this._swarmCtx, "Already joined", {
|
|
193
|
+
F: __dxlog_file2,
|
|
166
194
|
L: 177,
|
|
167
195
|
S: this,
|
|
168
196
|
A: [
|
|
@@ -171,7 +199,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
171
199
|
]
|
|
172
200
|
});
|
|
173
201
|
this._swarmCtx = new Context(void 0, {
|
|
174
|
-
F:
|
|
202
|
+
F: __dxlog_file2,
|
|
175
203
|
L: 179
|
|
176
204
|
});
|
|
177
205
|
const topic = getTopic(this._state.roomId);
|
|
@@ -182,7 +210,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
182
210
|
peerKey: this._deviceKey
|
|
183
211
|
}
|
|
184
212
|
}, {
|
|
185
|
-
F:
|
|
213
|
+
F: __dxlog_file2,
|
|
186
214
|
L: 181,
|
|
187
215
|
S: this,
|
|
188
216
|
C: (f, a) => f(...a)
|
|
@@ -201,7 +229,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
201
229
|
peerKey: this._deviceKey
|
|
202
230
|
}
|
|
203
231
|
}, {
|
|
204
|
-
F:
|
|
232
|
+
F: __dxlog_file2,
|
|
205
233
|
L: 188,
|
|
206
234
|
S: this,
|
|
207
235
|
C: (f, a) => f(...a)
|
|
@@ -213,7 +241,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
213
241
|
peerKey: this._deviceKey
|
|
214
242
|
}
|
|
215
243
|
}).catch((err) => log.catch(err, void 0, {
|
|
216
|
-
F:
|
|
244
|
+
F: __dxlog_file2,
|
|
217
245
|
L: 194,
|
|
218
246
|
S: this,
|
|
219
247
|
C: (f, a) => f(...a)
|
|
@@ -281,8 +309,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
281
309
|
}
|
|
282
310
|
async _reconcileSwarmState() {
|
|
283
311
|
const swarmEvent = this._lastSwarmEvent;
|
|
284
|
-
|
|
285
|
-
F:
|
|
312
|
+
invariant2(swarmEvent, void 0, {
|
|
313
|
+
F: __dxlog_file2,
|
|
286
314
|
L: 273,
|
|
287
315
|
S: this,
|
|
288
316
|
A: [
|
|
@@ -302,7 +330,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
302
330
|
error,
|
|
303
331
|
peer
|
|
304
332
|
}, {
|
|
305
|
-
F:
|
|
333
|
+
F: __dxlog_file2,
|
|
306
334
|
L: 290,
|
|
307
335
|
S: this,
|
|
308
336
|
C: (f, a) => f(...a)
|
|
@@ -315,7 +343,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
315
343
|
log("reconciling swarm state", {
|
|
316
344
|
users
|
|
317
345
|
}, {
|
|
318
|
-
F:
|
|
346
|
+
F: __dxlog_file2,
|
|
319
347
|
L: 297,
|
|
320
348
|
S: this,
|
|
321
349
|
C: (f, a) => f(...a)
|
|
@@ -338,6 +366,12 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
338
366
|
scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
|
|
339
367
|
}
|
|
340
368
|
}
|
|
369
|
+
constructor({ networkService }) {
|
|
370
|
+
super(), _define_property(this, "stateUpdated", new Event()), _define_property(this, "_state", {
|
|
371
|
+
activities: {}
|
|
372
|
+
}), _define_property(this, "_networkService", void 0), _define_property(this, "_lastSwarmEvent", void 0), _define_property(this, "_reconcileSwarmStateTask", void 0), _define_property(this, "_identityKey", void 0), _define_property(this, "_deviceKey", void 0), _define_property(this, "_displayName", void 0), _define_property(this, "_swarmCtx", void 0), _define_property(this, "_sendStateTask", void 0);
|
|
373
|
+
this._networkService = networkService;
|
|
374
|
+
}
|
|
341
375
|
};
|
|
342
376
|
_ts_decorate([
|
|
343
377
|
synchronized
|
|
@@ -403,17 +437,26 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
|
|
|
403
437
|
};
|
|
404
438
|
|
|
405
439
|
// src/calls/util/calls-service.ts
|
|
406
|
-
import { PersistentLifecycle } from "@dxos/async";
|
|
440
|
+
import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
|
|
407
441
|
import { Resource as Resource2 } from "@dxos/context";
|
|
408
|
-
import { invariant as
|
|
442
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
409
443
|
import { log as log2 } from "@dxos/log";
|
|
410
444
|
|
|
411
445
|
// src/calls/util/history-cache.ts
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
446
|
+
function _define_property2(obj, key, value) {
|
|
447
|
+
if (key in obj) {
|
|
448
|
+
Object.defineProperty(obj, key, {
|
|
449
|
+
value,
|
|
450
|
+
enumerable: true,
|
|
451
|
+
configurable: true,
|
|
452
|
+
writable: true
|
|
453
|
+
});
|
|
454
|
+
} else {
|
|
455
|
+
obj[key] = value;
|
|
416
456
|
}
|
|
457
|
+
return obj;
|
|
458
|
+
}
|
|
459
|
+
var HistoryCache = class {
|
|
417
460
|
push(...messages) {
|
|
418
461
|
if (this._messages.length >= this._limit) {
|
|
419
462
|
this._messages.shift();
|
|
@@ -423,53 +466,98 @@ var HistoryCache = class {
|
|
|
423
466
|
get() {
|
|
424
467
|
return this._messages;
|
|
425
468
|
}
|
|
469
|
+
constructor(limit = 100) {
|
|
470
|
+
_define_property2(this, "_limit", void 0);
|
|
471
|
+
_define_property2(this, "_messages", void 0);
|
|
472
|
+
this._limit = limit;
|
|
473
|
+
this._messages = [];
|
|
474
|
+
}
|
|
426
475
|
};
|
|
427
476
|
|
|
428
477
|
// src/calls/util/task-scheduling.ts
|
|
478
|
+
function _check_private_redeclaration(obj, privateCollection) {
|
|
479
|
+
if (privateCollection.has(obj)) {
|
|
480
|
+
throw new TypeError("Cannot initialize the same private elements twice on an object");
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
function _class_apply_descriptor_get(receiver, descriptor) {
|
|
484
|
+
if (descriptor.get) {
|
|
485
|
+
return descriptor.get.call(receiver);
|
|
486
|
+
}
|
|
487
|
+
return descriptor.value;
|
|
488
|
+
}
|
|
489
|
+
function _class_apply_descriptor_set(receiver, descriptor, value) {
|
|
490
|
+
if (descriptor.set) {
|
|
491
|
+
descriptor.set.call(receiver, value);
|
|
492
|
+
} else {
|
|
493
|
+
if (!descriptor.writable) {
|
|
494
|
+
throw new TypeError("attempted to set read only private field");
|
|
495
|
+
}
|
|
496
|
+
descriptor.value = value;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
function _class_extract_field_descriptor(receiver, privateMap, action) {
|
|
500
|
+
if (!privateMap.has(receiver)) {
|
|
501
|
+
throw new TypeError("attempted to " + action + " private field on non-instance");
|
|
502
|
+
}
|
|
503
|
+
return privateMap.get(receiver);
|
|
504
|
+
}
|
|
505
|
+
function _class_private_field_get(receiver, privateMap) {
|
|
506
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
|
|
507
|
+
return _class_apply_descriptor_get(receiver, descriptor);
|
|
508
|
+
}
|
|
509
|
+
function _class_private_field_init(obj, privateMap, value) {
|
|
510
|
+
_check_private_redeclaration(obj, privateMap);
|
|
511
|
+
privateMap.set(obj, value);
|
|
512
|
+
}
|
|
513
|
+
function _class_private_field_set(receiver, privateMap, value) {
|
|
514
|
+
var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
|
|
515
|
+
_class_apply_descriptor_set(receiver, descriptor, value);
|
|
516
|
+
return value;
|
|
517
|
+
}
|
|
429
518
|
var DefaultBatchSizeLimit = 64;
|
|
519
|
+
var _schedulerChain = /* @__PURE__ */ new WeakMap();
|
|
430
520
|
var FIFOScheduler = class {
|
|
431
|
-
#schedulerChain;
|
|
432
|
-
constructor() {
|
|
433
|
-
this.#schedulerChain = Promise.resolve();
|
|
434
|
-
}
|
|
435
521
|
schedule(task) {
|
|
436
522
|
return new Promise((resolve, reject) => {
|
|
437
|
-
this
|
|
523
|
+
_class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
|
|
438
524
|
try {
|
|
439
525
|
resolve(await task());
|
|
440
526
|
} catch (error) {
|
|
441
527
|
reject(error);
|
|
442
528
|
}
|
|
443
|
-
});
|
|
529
|
+
}));
|
|
444
530
|
});
|
|
445
531
|
}
|
|
532
|
+
constructor() {
|
|
533
|
+
_class_private_field_init(this, _schedulerChain, {
|
|
534
|
+
writable: true,
|
|
535
|
+
value: void 0
|
|
536
|
+
});
|
|
537
|
+
_class_private_field_set(this, _schedulerChain, Promise.resolve());
|
|
538
|
+
}
|
|
446
539
|
};
|
|
540
|
+
var _currentBatch = /* @__PURE__ */ new WeakMap();
|
|
541
|
+
var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
|
|
542
|
+
var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
|
|
447
543
|
var BulkRequestDispatcher = class {
|
|
448
|
-
#currentBatch;
|
|
449
|
-
#currentBulkResponse;
|
|
450
|
-
#batchSizeLimit;
|
|
451
|
-
constructor(batchSizeLimit = DefaultBatchSizeLimit) {
|
|
452
|
-
this.#currentBatch = [];
|
|
453
|
-
this.#currentBulkResponse = null;
|
|
454
|
-
this.#batchSizeLimit = batchSizeLimit;
|
|
455
|
-
}
|
|
456
544
|
/**
|
|
457
545
|
* Returns a bulk response promise.
|
|
458
546
|
* At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
|
|
459
547
|
*/
|
|
460
548
|
doBulkRequest(params, bulkRequestFunc) {
|
|
461
|
-
if (this
|
|
462
|
-
this
|
|
463
|
-
this
|
|
549
|
+
if (_class_private_field_get(this, _currentBatch).length >= _class_private_field_get(this, _batchSizeLimit)) {
|
|
550
|
+
_class_private_field_set(this, _currentBatch, []);
|
|
551
|
+
_class_private_field_set(this, _currentBulkResponse, null);
|
|
464
552
|
}
|
|
465
|
-
this
|
|
466
|
-
if (this
|
|
467
|
-
return this
|
|
553
|
+
_class_private_field_get(this, _currentBatch).push(params);
|
|
554
|
+
if (_class_private_field_get(this, _currentBulkResponse) != null) {
|
|
555
|
+
return _class_private_field_get(this, _currentBulkResponse);
|
|
468
556
|
}
|
|
469
|
-
const batch = this
|
|
470
|
-
this
|
|
557
|
+
const batch = _class_private_field_get(this, _currentBatch);
|
|
558
|
+
_class_private_field_set(this, _currentBulkResponse, new Promise((resolve, reject) => {
|
|
471
559
|
setTimeout(() => {
|
|
472
|
-
this
|
|
560
|
+
_class_private_field_set(this, _currentBulkResponse, null);
|
|
473
561
|
const batchCopy = batch.splice(0, batch.length);
|
|
474
562
|
bulkRequestFunc(batchCopy).then((result) => {
|
|
475
563
|
resolve(result);
|
|
@@ -477,28 +565,45 @@ var BulkRequestDispatcher = class {
|
|
|
477
565
|
reject(err);
|
|
478
566
|
});
|
|
479
567
|
}, 0);
|
|
568
|
+
}));
|
|
569
|
+
return _class_private_field_get(this, _currentBulkResponse);
|
|
570
|
+
}
|
|
571
|
+
constructor(batchSizeLimit = DefaultBatchSizeLimit) {
|
|
572
|
+
_class_private_field_init(this, _currentBatch, {
|
|
573
|
+
writable: true,
|
|
574
|
+
value: void 0
|
|
480
575
|
});
|
|
481
|
-
|
|
576
|
+
_class_private_field_init(this, _currentBulkResponse, {
|
|
577
|
+
writable: true,
|
|
578
|
+
value: void 0
|
|
579
|
+
});
|
|
580
|
+
_class_private_field_init(this, _batchSizeLimit, {
|
|
581
|
+
writable: true,
|
|
582
|
+
value: void 0
|
|
583
|
+
});
|
|
584
|
+
_class_private_field_set(this, _currentBatch, []);
|
|
585
|
+
_class_private_field_set(this, _currentBulkResponse, null);
|
|
586
|
+
_class_private_field_set(this, _batchSizeLimit, batchSizeLimit);
|
|
482
587
|
}
|
|
483
588
|
};
|
|
484
589
|
|
|
485
590
|
// src/calls/util/calls-service.ts
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
start: () => this._startSession(),
|
|
494
|
-
stop: (session) => this._stopSession(session)
|
|
591
|
+
function _define_property3(obj, key, value) {
|
|
592
|
+
if (key in obj) {
|
|
593
|
+
Object.defineProperty(obj, key, {
|
|
594
|
+
value,
|
|
595
|
+
enumerable: true,
|
|
596
|
+
configurable: true,
|
|
597
|
+
writable: true
|
|
495
598
|
});
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
this.pullTrackDispatcher = new BulkRequestDispatcher(32);
|
|
499
|
-
this.closeTrackDispatcher = new BulkRequestDispatcher(32);
|
|
500
|
-
this._config = config;
|
|
599
|
+
} else {
|
|
600
|
+
obj[key] = value;
|
|
501
601
|
}
|
|
602
|
+
return obj;
|
|
603
|
+
}
|
|
604
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
|
|
605
|
+
var NETWORK_TIMEOUT = 5e3;
|
|
606
|
+
var CallsServicePeer = class extends Resource2 {
|
|
502
607
|
async _open(ctx) {
|
|
503
608
|
await this._persistentLifecycle.open(ctx);
|
|
504
609
|
}
|
|
@@ -526,11 +631,11 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
526
631
|
});
|
|
527
632
|
peerConnection.addEventListener("connectionstatechange", () => {
|
|
528
633
|
if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
|
|
529
|
-
log2.
|
|
634
|
+
log2.info("calls connection failed", {
|
|
530
635
|
state: peerConnection.connectionState
|
|
531
636
|
}, {
|
|
532
|
-
F:
|
|
533
|
-
L:
|
|
637
|
+
F: __dxlog_file3,
|
|
638
|
+
L: 121,
|
|
534
639
|
S: this,
|
|
535
640
|
C: (f, a) => f(...a)
|
|
536
641
|
});
|
|
@@ -541,11 +646,11 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
541
646
|
peerConnection.addEventListener("iceconnectionstatechange", () => {
|
|
542
647
|
clearTimeout(iceTimeout);
|
|
543
648
|
if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
|
|
544
|
-
log2.
|
|
649
|
+
log2.info("calls connection to ICEs failed", {
|
|
545
650
|
state: peerConnection.iceConnectionState
|
|
546
651
|
}, {
|
|
547
|
-
F:
|
|
548
|
-
L:
|
|
652
|
+
F: __dxlog_file3,
|
|
653
|
+
L: 130,
|
|
549
654
|
S: this,
|
|
550
655
|
C: (f, a) => f(...a)
|
|
551
656
|
});
|
|
@@ -555,19 +660,19 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
555
660
|
iceTimeout = window.setTimeout(() => {
|
|
556
661
|
if (peerConnection.iceConnectionState === "connected") {
|
|
557
662
|
log2.info("calls iceConnectionState is connected", void 0, {
|
|
558
|
-
F:
|
|
559
|
-
L:
|
|
663
|
+
F: __dxlog_file3,
|
|
664
|
+
L: 139,
|
|
560
665
|
S: this,
|
|
561
666
|
C: (f, a) => f(...a)
|
|
562
667
|
});
|
|
563
668
|
return;
|
|
564
669
|
}
|
|
565
|
-
log2.
|
|
670
|
+
log2.info("calls iceConnectionState timed out", {
|
|
566
671
|
state: peerConnection.iceConnectionState,
|
|
567
672
|
timeoutSeconds
|
|
568
673
|
}, {
|
|
569
|
-
F:
|
|
570
|
-
L:
|
|
674
|
+
F: __dxlog_file3,
|
|
675
|
+
L: 143,
|
|
571
676
|
S: this,
|
|
572
677
|
C: (f, a) => f(...a)
|
|
573
678
|
});
|
|
@@ -579,8 +684,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
579
684
|
}
|
|
580
685
|
async _initiateCallSession() {
|
|
581
686
|
log2("creating new session", void 0, {
|
|
582
|
-
F:
|
|
583
|
-
L:
|
|
687
|
+
F: __dxlog_file3,
|
|
688
|
+
L: 153,
|
|
584
689
|
S: this,
|
|
585
690
|
C: (f, a) => f(...a)
|
|
586
691
|
});
|
|
@@ -591,6 +696,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
591
696
|
}
|
|
592
697
|
async _fetch(relativePath, requestInit) {
|
|
593
698
|
this.history.push({
|
|
699
|
+
endpoint: relativePath,
|
|
594
700
|
type: "request",
|
|
595
701
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
596
702
|
method: requestInit?.method ?? "GET",
|
|
@@ -605,8 +711,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
605
711
|
status: response.status,
|
|
606
712
|
text: await response.text()
|
|
607
713
|
}, {
|
|
608
|
-
F:
|
|
609
|
-
L:
|
|
714
|
+
F: __dxlog_file3,
|
|
715
|
+
L: 169,
|
|
610
716
|
S: this,
|
|
611
717
|
C: (f, a) => f(...a)
|
|
612
718
|
});
|
|
@@ -615,6 +721,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
615
721
|
try {
|
|
616
722
|
const data = await response.clone().json();
|
|
617
723
|
this.history.push({
|
|
724
|
+
endpoint: relativePath,
|
|
618
725
|
type: "response",
|
|
619
726
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
620
727
|
status: response.status,
|
|
@@ -627,6 +734,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
627
734
|
} catch (error) {
|
|
628
735
|
const text = await response.text();
|
|
629
736
|
this.history.push({
|
|
737
|
+
endpoint: relativePath,
|
|
630
738
|
type: "response",
|
|
631
739
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
632
740
|
status: response.status,
|
|
@@ -637,8 +745,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
637
745
|
text,
|
|
638
746
|
status: response.status
|
|
639
747
|
}, {
|
|
640
|
-
F:
|
|
641
|
-
L:
|
|
748
|
+
F: __dxlog_file3,
|
|
749
|
+
L: 196,
|
|
642
750
|
S: this,
|
|
643
751
|
C: (f, a) => f(...a)
|
|
644
752
|
});
|
|
@@ -647,8 +755,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
647
755
|
}
|
|
648
756
|
async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
|
|
649
757
|
log2.verbose("pushing track ", trackName, {
|
|
650
|
-
F:
|
|
651
|
-
L:
|
|
758
|
+
F: __dxlog_file3,
|
|
759
|
+
L: 218,
|
|
652
760
|
S: this,
|
|
653
761
|
C: (f, a) => f(...a)
|
|
654
762
|
});
|
|
@@ -673,9 +781,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
673
781
|
}))
|
|
674
782
|
})
|
|
675
783
|
});
|
|
676
|
-
|
|
677
|
-
F:
|
|
678
|
-
L:
|
|
784
|
+
invariant3(response.tracks !== void 0, void 0, {
|
|
785
|
+
F: __dxlog_file3,
|
|
786
|
+
L: 243,
|
|
679
787
|
S: this,
|
|
680
788
|
A: [
|
|
681
789
|
"response.tracks !== undefined",
|
|
@@ -689,7 +797,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
689
797
|
return {
|
|
690
798
|
tracks: response.tracks
|
|
691
799
|
};
|
|
692
|
-
})).then(({ tracks }) => {
|
|
800
|
+
})).then(async ({ tracks }) => {
|
|
693
801
|
const trackData = tracks.find((t) => t.mid === transceiver.mid);
|
|
694
802
|
if (trackData) {
|
|
695
803
|
return {
|
|
@@ -699,19 +807,12 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
699
807
|
};
|
|
700
808
|
} else {
|
|
701
809
|
log2.error("missing track data", void 0, {
|
|
702
|
-
F:
|
|
703
|
-
L:
|
|
810
|
+
F: __dxlog_file3,
|
|
811
|
+
L: 267,
|
|
704
812
|
S: this,
|
|
705
813
|
C: (f, a) => f(...a)
|
|
706
814
|
});
|
|
707
815
|
}
|
|
708
|
-
}).catch((err) => {
|
|
709
|
-
log2.catch(err, void 0, {
|
|
710
|
-
F: __dxlog_file2,
|
|
711
|
-
L: 261,
|
|
712
|
-
S: this,
|
|
713
|
-
C: (f, a) => f(...a)
|
|
714
|
-
});
|
|
715
816
|
});
|
|
716
817
|
const onDispose = async () => {
|
|
717
818
|
if (transceiver.mid) {
|
|
@@ -724,9 +825,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
724
825
|
}
|
|
725
826
|
async pushTrack({ track, encodings = [], ctx, previousTrack }) {
|
|
726
827
|
await this.waitUntilOpen();
|
|
727
|
-
|
|
728
|
-
F:
|
|
729
|
-
L:
|
|
828
|
+
invariant3(this.session, void 0, {
|
|
829
|
+
F: __dxlog_file3,
|
|
830
|
+
L: 295,
|
|
730
831
|
S: this,
|
|
731
832
|
A: [
|
|
732
833
|
"this.session",
|
|
@@ -738,8 +839,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
738
839
|
previousTrack,
|
|
739
840
|
encodings
|
|
740
841
|
}, {
|
|
741
|
-
F:
|
|
742
|
-
L:
|
|
842
|
+
F: __dxlog_file3,
|
|
843
|
+
L: 296,
|
|
743
844
|
S: this,
|
|
744
845
|
C: (f, a) => f(...a)
|
|
745
846
|
});
|
|
@@ -751,8 +852,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
751
852
|
previousTrack,
|
|
752
853
|
transceiver: transceiver2
|
|
753
854
|
}, {
|
|
754
|
-
F:
|
|
755
|
-
L:
|
|
855
|
+
F: __dxlog_file3,
|
|
856
|
+
L: 300,
|
|
756
857
|
S: this,
|
|
757
858
|
C: (f, a) => f(...a)
|
|
758
859
|
});
|
|
@@ -763,23 +864,23 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
763
864
|
previousTrack,
|
|
764
865
|
transceiver: transceiver2
|
|
765
866
|
}, {
|
|
766
|
-
F:
|
|
767
|
-
L:
|
|
867
|
+
F: __dxlog_file3,
|
|
868
|
+
L: 303,
|
|
768
869
|
S: this,
|
|
769
870
|
C: (f, a) => f(...a)
|
|
770
871
|
});
|
|
771
872
|
transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
|
|
772
|
-
F:
|
|
773
|
-
L:
|
|
873
|
+
F: __dxlog_file3,
|
|
874
|
+
L: 304,
|
|
774
875
|
S: this,
|
|
775
876
|
C: (f, a) => f(...a)
|
|
776
877
|
}));
|
|
777
878
|
return previousTrack;
|
|
778
879
|
}
|
|
779
880
|
}
|
|
780
|
-
|
|
781
|
-
F:
|
|
782
|
-
L:
|
|
881
|
+
invariant3(track, void 0, {
|
|
882
|
+
F: __dxlog_file3,
|
|
883
|
+
L: 308,
|
|
783
884
|
S: this,
|
|
784
885
|
A: [
|
|
785
886
|
"track",
|
|
@@ -791,8 +892,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
791
892
|
direction: "sendonly"
|
|
792
893
|
});
|
|
793
894
|
log2.verbose("creating transceiver", void 0, {
|
|
794
|
-
F:
|
|
795
|
-
L:
|
|
895
|
+
F: __dxlog_file3,
|
|
896
|
+
L: 313,
|
|
796
897
|
S: this,
|
|
797
898
|
C: (f, a) => f(...a)
|
|
798
899
|
});
|
|
@@ -803,9 +904,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
803
904
|
sessionId: this.session.sessionId,
|
|
804
905
|
trackName: stableId
|
|
805
906
|
});
|
|
806
|
-
|
|
807
|
-
F:
|
|
808
|
-
L:
|
|
907
|
+
invariant3(pushedTrackData, void 0, {
|
|
908
|
+
F: __dxlog_file3,
|
|
909
|
+
L: 322,
|
|
809
910
|
S: this,
|
|
810
911
|
A: [
|
|
811
912
|
"pushedTrackData",
|
|
@@ -821,8 +922,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
821
922
|
};
|
|
822
923
|
});
|
|
823
924
|
transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
|
|
824
|
-
F:
|
|
825
|
-
L:
|
|
925
|
+
F: __dxlog_file3,
|
|
926
|
+
L: 329,
|
|
826
927
|
S: this,
|
|
827
928
|
C: (f, a) => f(...a)
|
|
828
929
|
}));
|
|
@@ -834,8 +935,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
834
935
|
log2("pulling track", {
|
|
835
936
|
trackName: trackData.trackName
|
|
836
937
|
}, {
|
|
837
|
-
F:
|
|
838
|
-
L:
|
|
938
|
+
F: __dxlog_file3,
|
|
939
|
+
L: 347,
|
|
839
940
|
S: this,
|
|
840
941
|
C: (f, a) => f(...a)
|
|
841
942
|
});
|
|
@@ -849,9 +950,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
849
950
|
if (newTrackResponse.errorCode) {
|
|
850
951
|
throw new Error(newTrackResponse.errorDescription);
|
|
851
952
|
}
|
|
852
|
-
|
|
853
|
-
F:
|
|
854
|
-
L:
|
|
953
|
+
invariant3(newTrackResponse.tracks, void 0, {
|
|
954
|
+
F: __dxlog_file3,
|
|
955
|
+
L: 360,
|
|
855
956
|
S: this,
|
|
856
957
|
A: [
|
|
857
958
|
"newTrackResponse.tracks",
|
|
@@ -897,18 +998,18 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
897
998
|
mid = trackInfo.mid;
|
|
898
999
|
return track;
|
|
899
1000
|
}).catch((err) => log2.catch(err, void 0, {
|
|
900
|
-
F:
|
|
901
|
-
L:
|
|
1001
|
+
F: __dxlog_file3,
|
|
1002
|
+
L: 412,
|
|
902
1003
|
S: this,
|
|
903
1004
|
C: (f, a) => f(...a)
|
|
904
1005
|
}));
|
|
905
1006
|
} else {
|
|
906
|
-
log2.
|
|
1007
|
+
log2.info("missing track info", {
|
|
907
1008
|
trackData,
|
|
908
1009
|
availableTracks: Array.from(trackMap.keys())
|
|
909
1010
|
}, {
|
|
910
|
-
F:
|
|
911
|
-
L:
|
|
1011
|
+
F: __dxlog_file3,
|
|
1012
|
+
L: 414,
|
|
912
1013
|
S: this,
|
|
913
1014
|
C: (f, a) => f(...a)
|
|
914
1015
|
});
|
|
@@ -917,8 +1018,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
917
1018
|
const onDispose = async () => {
|
|
918
1019
|
if (mid) {
|
|
919
1020
|
log2("closing pulled track ", trackData.trackName, {
|
|
920
|
-
F:
|
|
921
|
-
L:
|
|
1021
|
+
F: __dxlog_file3,
|
|
1022
|
+
L: 420,
|
|
922
1023
|
S: this,
|
|
923
1024
|
C: (f, a) => f(...a)
|
|
924
1025
|
});
|
|
@@ -932,9 +1033,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
932
1033
|
}
|
|
933
1034
|
async pullTrack({ ctx, trackData }) {
|
|
934
1035
|
await this.waitUntilOpen();
|
|
935
|
-
|
|
936
|
-
F:
|
|
937
|
-
L:
|
|
1036
|
+
invariant3(this.session, void 0, {
|
|
1037
|
+
F: __dxlog_file3,
|
|
1038
|
+
L: 441,
|
|
938
1039
|
S: this,
|
|
939
1040
|
A: [
|
|
940
1041
|
"this.session",
|
|
@@ -986,6 +1087,13 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
986
1087
|
}
|
|
987
1088
|
}));
|
|
988
1089
|
}
|
|
1090
|
+
constructor(config) {
|
|
1091
|
+
super(), _define_property3(this, "history", new HistoryCache(100)), _define_property3(this, "_persistentLifecycle", new PersistentLifecycle({
|
|
1092
|
+
start: () => this._startSession(),
|
|
1093
|
+
stop: (session) => this._stopSession(session)
|
|
1094
|
+
})), _define_property3(this, "_config", void 0), _define_property3(this, "taskScheduler", new FIFOScheduler()), _define_property3(this, "pushTrackDispatcher", new BulkRequestDispatcher(32)), _define_property3(this, "pullTrackDispatcher", new BulkRequestDispatcher(32)), _define_property3(this, "closeTrackDispatcher", new BulkRequestDispatcher(32));
|
|
1095
|
+
this._config = config;
|
|
1096
|
+
}
|
|
989
1097
|
};
|
|
990
1098
|
var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
|
|
991
1099
|
setTimeout(reject, timeout);
|
|
@@ -1020,9 +1128,9 @@ var peerConnectionIsConnected = async (peerConnection) => {
|
|
|
1020
1128
|
|
|
1021
1129
|
// src/calls/util/media.ts
|
|
1022
1130
|
import { log as log3 } from "@dxos/log";
|
|
1023
|
-
var
|
|
1131
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
|
|
1024
1132
|
var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
|
|
1025
|
-
deviceList
|
|
1133
|
+
deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
|
|
1026
1134
|
const firstDevice = deviceList[0];
|
|
1027
1135
|
if (!firstDevice) {
|
|
1028
1136
|
throw new Error("No devices found");
|
|
@@ -1032,7 +1140,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
|
|
|
1032
1140
|
var acquireTrack = async (device, constraints) => {
|
|
1033
1141
|
const { deviceId, label } = device;
|
|
1034
1142
|
log3.info(`requesting ${label}`, void 0, {
|
|
1035
|
-
F:
|
|
1143
|
+
F: __dxlog_file4,
|
|
1036
1144
|
L: 23,
|
|
1037
1145
|
S: void 0,
|
|
1038
1146
|
C: (f, a) => f(...a)
|
|
@@ -1077,14 +1185,24 @@ var getScreenshare = async ({ contentHint }) => {
|
|
|
1077
1185
|
// src/calls/speaking-monitor.ts
|
|
1078
1186
|
import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
|
|
1079
1187
|
import { Resource as Resource3 } from "@dxos/context";
|
|
1188
|
+
function _define_property4(obj, key, value) {
|
|
1189
|
+
if (key in obj) {
|
|
1190
|
+
Object.defineProperty(obj, key, {
|
|
1191
|
+
value,
|
|
1192
|
+
enumerable: true,
|
|
1193
|
+
configurable: true,
|
|
1194
|
+
writable: true
|
|
1195
|
+
});
|
|
1196
|
+
} else {
|
|
1197
|
+
obj[key] = value;
|
|
1198
|
+
}
|
|
1199
|
+
return obj;
|
|
1200
|
+
}
|
|
1080
1201
|
var NOT_SPEAKING_AFTER = 500;
|
|
1081
1202
|
var START_SPEAKING_THRESHOLD = 0.05;
|
|
1082
1203
|
var CONTINUE_SPEAKING_THRESHOLD = 0.02;
|
|
1083
1204
|
var MIN_EVENT_INTERVAL = 100;
|
|
1084
1205
|
var SpeakingMonitor = class extends Resource3 {
|
|
1085
|
-
constructor(_mediaStreamTrack) {
|
|
1086
|
-
super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
|
|
1087
|
-
}
|
|
1088
1206
|
get isSpeaking() {
|
|
1089
1207
|
return this._isSpeaking;
|
|
1090
1208
|
}
|
|
@@ -1128,40 +1246,50 @@ var SpeakingMonitor = class extends Resource3 {
|
|
|
1128
1246
|
this._lastEventTime = Date.now();
|
|
1129
1247
|
this.speakingChanged.emit(this._isSpeaking);
|
|
1130
1248
|
}
|
|
1249
|
+
constructor(_mediaStreamTrack) {
|
|
1250
|
+
super(), _define_property4(this, "_mediaStreamTrack", void 0), /**
|
|
1251
|
+
* Event that is emitted when the user starts or stops speaking.
|
|
1252
|
+
* It is debounced to prevent rapid state changes.
|
|
1253
|
+
*/
|
|
1254
|
+
_define_property4(this, "speakingChanged", void 0), /**
|
|
1255
|
+
* Real state of the user speaking.
|
|
1256
|
+
*/
|
|
1257
|
+
_define_property4(this, "_isSpeaking", void 0), _define_property4(this, "_lastEventTime", void 0), _define_property4(this, "_deferredUpdate", void 0), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
|
|
1258
|
+
}
|
|
1131
1259
|
};
|
|
1132
1260
|
|
|
1133
1261
|
// src/calls/media-manager.ts
|
|
1134
1262
|
import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
|
|
1135
|
-
import {
|
|
1263
|
+
import { Resource as Resource4, cancelWithContext } from "@dxos/context";
|
|
1264
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
1136
1265
|
import { log as log4 } from "@dxos/log";
|
|
1266
|
+
function _define_property5(obj, key, value) {
|
|
1267
|
+
if (key in obj) {
|
|
1268
|
+
Object.defineProperty(obj, key, {
|
|
1269
|
+
value,
|
|
1270
|
+
enumerable: true,
|
|
1271
|
+
configurable: true,
|
|
1272
|
+
writable: true
|
|
1273
|
+
});
|
|
1274
|
+
} else {
|
|
1275
|
+
obj[key] = value;
|
|
1276
|
+
}
|
|
1277
|
+
return obj;
|
|
1278
|
+
}
|
|
1137
1279
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
1138
1280
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1139
1281
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1140
1282
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1141
1283
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1142
1284
|
}
|
|
1143
|
-
var
|
|
1285
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
|
|
1144
1286
|
var VIDEO_WIDTH = 1280;
|
|
1145
1287
|
var VIDEO_HEIGHT = 720;
|
|
1146
1288
|
var MAX_WEB_CAM_FRAMERATE = 24;
|
|
1147
1289
|
var MAX_WEB_CAM_BITRATE = 12e5;
|
|
1148
|
-
var RETRY_INTERVAL =
|
|
1149
|
-
var USE_INAUDIBLE_AUDIO =
|
|
1290
|
+
var RETRY_INTERVAL = 100;
|
|
1291
|
+
var USE_INAUDIBLE_AUDIO = true;
|
|
1150
1292
|
var MediaManager = class extends Resource4 {
|
|
1151
|
-
constructor() {
|
|
1152
|
-
super(...arguments);
|
|
1153
|
-
this.stateUpdated = new Event3();
|
|
1154
|
-
this._state = {
|
|
1155
|
-
pulledVideoStreams: {},
|
|
1156
|
-
pulledAudioTracks: {}
|
|
1157
|
-
};
|
|
1158
|
-
this._speakingMonitor = void 0;
|
|
1159
|
-
this._trackToReconcile = [];
|
|
1160
|
-
this._blackCanvasStreamTrack = void 0;
|
|
1161
|
-
this._inaudibleAudioStreamTrack = void 0;
|
|
1162
|
-
this._pushTracksTask = void 0;
|
|
1163
|
-
this._pullTracksTask = void 0;
|
|
1164
|
-
}
|
|
1165
1293
|
get isSpeaking() {
|
|
1166
1294
|
return this._speakingMonitor?.isSpeaking;
|
|
1167
1295
|
}
|
|
@@ -1300,8 +1428,8 @@ var MediaManager = class extends Resource4 {
|
|
|
1300
1428
|
}
|
|
1301
1429
|
async _reconcilePulledMedia() {
|
|
1302
1430
|
log4("reconciling tracks", void 0, {
|
|
1303
|
-
F:
|
|
1304
|
-
L:
|
|
1431
|
+
F: __dxlog_file5,
|
|
1432
|
+
L: 223,
|
|
1305
1433
|
S: this,
|
|
1306
1434
|
C: (f, a) => f(...a)
|
|
1307
1435
|
});
|
|
@@ -1318,12 +1446,12 @@ var MediaManager = class extends Resource4 {
|
|
|
1318
1446
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
1319
1447
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
|
|
1320
1448
|
}, {
|
|
1321
|
-
F:
|
|
1322
|
-
L:
|
|
1449
|
+
F: __dxlog_file5,
|
|
1450
|
+
L: 242,
|
|
1323
1451
|
S: this,
|
|
1324
1452
|
C: (f, a) => f(...a)
|
|
1325
1453
|
});
|
|
1326
|
-
await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
|
|
1454
|
+
const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
|
|
1327
1455
|
await Promise.all([
|
|
1328
1456
|
...audioTracksToClose,
|
|
1329
1457
|
...videoStreamsToClose
|
|
@@ -1332,55 +1460,102 @@ var MediaManager = class extends Resource4 {
|
|
|
1332
1460
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
1333
1461
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
|
|
1334
1462
|
}, {
|
|
1335
|
-
F:
|
|
1336
|
-
L:
|
|
1463
|
+
F: __dxlog_file5,
|
|
1464
|
+
L: 257,
|
|
1337
1465
|
S: this,
|
|
1338
1466
|
C: (f, a) => f(...a)
|
|
1339
1467
|
});
|
|
1340
1468
|
this.stateUpdated.emit(this._state);
|
|
1469
|
+
if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
|
|
1470
|
+
await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
|
|
1471
|
+
log4.info("retrying pull tracks", {
|
|
1472
|
+
tracksToPull
|
|
1473
|
+
}, {
|
|
1474
|
+
F: __dxlog_file5,
|
|
1475
|
+
L: 265,
|
|
1476
|
+
S: this,
|
|
1477
|
+
C: (f, a) => f(...a)
|
|
1478
|
+
});
|
|
1479
|
+
invariant4(this._pullTracksTask, void 0, {
|
|
1480
|
+
F: __dxlog_file5,
|
|
1481
|
+
L: 266,
|
|
1482
|
+
S: this,
|
|
1483
|
+
A: [
|
|
1484
|
+
"this._pullTracksTask",
|
|
1485
|
+
""
|
|
1486
|
+
]
|
|
1487
|
+
});
|
|
1488
|
+
this._pullTracksTask.schedule();
|
|
1489
|
+
}
|
|
1341
1490
|
}
|
|
1342
1491
|
async _pushTracks() {
|
|
1343
1492
|
if (!this._state.peer?.isOpen) {
|
|
1344
1493
|
return;
|
|
1345
1494
|
}
|
|
1346
1495
|
let updated = false;
|
|
1347
|
-
const [
|
|
1348
|
-
this.
|
|
1496
|
+
const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
|
|
1497
|
+
this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
|
|
1349
1498
|
{
|
|
1350
1499
|
maxFramerate: MAX_WEB_CAM_FRAMERATE,
|
|
1351
1500
|
maxBitrate: MAX_WEB_CAM_BITRATE
|
|
1352
1501
|
}
|
|
1353
1502
|
]),
|
|
1354
|
-
this.
|
|
1503
|
+
this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
|
|
1355
1504
|
{
|
|
1356
1505
|
networkPriority: "high"
|
|
1357
1506
|
}
|
|
1358
1507
|
]),
|
|
1359
|
-
this.
|
|
1508
|
+
this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
|
|
1360
1509
|
]);
|
|
1361
|
-
if (
|
|
1362
|
-
this._state.pushedVideoTrack =
|
|
1510
|
+
if (pushVideoResult.track !== this._state.pushedVideoTrack) {
|
|
1511
|
+
this._state.pushedVideoTrack = pushVideoResult.track;
|
|
1363
1512
|
updated = true;
|
|
1364
1513
|
}
|
|
1365
|
-
if (
|
|
1366
|
-
this._state.pushedAudioTrack =
|
|
1514
|
+
if (pushAudioResult.track !== this._state.pushedAudioTrack) {
|
|
1515
|
+
this._state.pushedAudioTrack = pushAudioResult.track;
|
|
1367
1516
|
updated = true;
|
|
1368
1517
|
}
|
|
1369
|
-
if (
|
|
1370
|
-
this._state.pushedScreenshareTrack =
|
|
1518
|
+
if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
|
|
1519
|
+
this._state.pushedScreenshareTrack = pushScreenshareResult.track;
|
|
1371
1520
|
updated = true;
|
|
1372
1521
|
}
|
|
1373
|
-
|
|
1374
|
-
|
|
1522
|
+
const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
|
|
1523
|
+
if (updated) {
|
|
1524
|
+
this.stateUpdated.emit(this._state);
|
|
1525
|
+
}
|
|
1526
|
+
if (shouldRetry) {
|
|
1527
|
+
await cancelWithContext(this._ctx, sleep2(RETRY_INTERVAL));
|
|
1528
|
+
log4.info("retrying push tracks", {
|
|
1529
|
+
pushVideoResult,
|
|
1530
|
+
pushAudioResult,
|
|
1531
|
+
pushScreenshareResult
|
|
1532
|
+
}, {
|
|
1533
|
+
F: __dxlog_file5,
|
|
1534
|
+
L: 306,
|
|
1535
|
+
S: this,
|
|
1536
|
+
C: (f, a) => f(...a)
|
|
1537
|
+
});
|
|
1538
|
+
invariant4(this._pushTracksTask, void 0, {
|
|
1539
|
+
F: __dxlog_file5,
|
|
1540
|
+
L: 307,
|
|
1541
|
+
S: this,
|
|
1542
|
+
A: [
|
|
1543
|
+
"this._pushTracksTask",
|
|
1544
|
+
""
|
|
1545
|
+
]
|
|
1546
|
+
});
|
|
1547
|
+
this._pushTracksTask.schedule();
|
|
1375
1548
|
}
|
|
1376
|
-
this.stateUpdated.emit(this._state);
|
|
1377
1549
|
}
|
|
1378
1550
|
async _pullTrack(name) {
|
|
1379
1551
|
const ctx = this._ctx.derive();
|
|
1380
1552
|
try {
|
|
1381
1553
|
const trackData = TrackNameCodec.decode(name);
|
|
1382
1554
|
const track = await this._state.peer.pullTrack({
|
|
1383
|
-
trackData
|
|
1555
|
+
trackData: {
|
|
1556
|
+
...trackData,
|
|
1557
|
+
mid: void 0
|
|
1558
|
+
},
|
|
1384
1559
|
ctx
|
|
1385
1560
|
});
|
|
1386
1561
|
if (track?.readyState === "ended") {
|
|
@@ -1393,7 +1568,9 @@ var MediaManager = class extends Resource4 {
|
|
|
1393
1568
|
ctx
|
|
1394
1569
|
};
|
|
1395
1570
|
ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
|
|
1396
|
-
|
|
1571
|
+
return {
|
|
1572
|
+
shouldRetry: false
|
|
1573
|
+
};
|
|
1397
1574
|
}
|
|
1398
1575
|
case "video": {
|
|
1399
1576
|
const mediaStream = new MediaStream();
|
|
@@ -1407,43 +1584,68 @@ var MediaManager = class extends Resource4 {
|
|
|
1407
1584
|
track.stop();
|
|
1408
1585
|
delete this._state.pulledVideoStreams[name];
|
|
1409
1586
|
});
|
|
1410
|
-
|
|
1587
|
+
return {
|
|
1588
|
+
shouldRetry: false
|
|
1589
|
+
};
|
|
1411
1590
|
}
|
|
1412
1591
|
default:
|
|
1413
1592
|
throw new Error(`Invalid track kind: ${track?.kind}`);
|
|
1414
1593
|
}
|
|
1415
1594
|
} catch (err) {
|
|
1416
|
-
log4.
|
|
1595
|
+
log4.info("failed to pull track", {
|
|
1417
1596
|
err,
|
|
1418
1597
|
name
|
|
1419
1598
|
}, {
|
|
1420
|
-
F:
|
|
1421
|
-
L:
|
|
1599
|
+
F: __dxlog_file5,
|
|
1600
|
+
L: 343,
|
|
1422
1601
|
S: this,
|
|
1423
1602
|
C: (f, a) => f(...a)
|
|
1424
1603
|
});
|
|
1425
1604
|
void ctx.dispose();
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1605
|
+
return {
|
|
1606
|
+
shouldRetry: true
|
|
1607
|
+
};
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1610
|
+
async _maybePushTrack(track, previousTrack, encodings) {
|
|
1611
|
+
if (!track && !previousTrack) {
|
|
1612
|
+
return {
|
|
1613
|
+
track: void 0
|
|
1614
|
+
};
|
|
1615
|
+
}
|
|
1616
|
+
const ctx = this._ctx.derive();
|
|
1617
|
+
try {
|
|
1618
|
+
return {
|
|
1619
|
+
track: await this._state.peer.pushTrack({
|
|
1620
|
+
ctx,
|
|
1621
|
+
track: track ?? null,
|
|
1622
|
+
previousTrack,
|
|
1623
|
+
encodings
|
|
1624
|
+
})
|
|
1625
|
+
};
|
|
1626
|
+
} catch (err) {
|
|
1627
|
+
log4.info("failed to push track", {
|
|
1628
|
+
err,
|
|
1629
|
+
track,
|
|
1630
|
+
previousTrack,
|
|
1631
|
+
encodings
|
|
1429
1632
|
}, {
|
|
1430
|
-
F:
|
|
1431
|
-
L:
|
|
1633
|
+
F: __dxlog_file5,
|
|
1634
|
+
L: 370,
|
|
1432
1635
|
S: this,
|
|
1433
1636
|
C: (f, a) => f(...a)
|
|
1434
1637
|
});
|
|
1435
|
-
|
|
1638
|
+
void ctx.dispose();
|
|
1639
|
+
return {
|
|
1640
|
+
shouldRetry: true
|
|
1641
|
+
};
|
|
1436
1642
|
}
|
|
1437
1643
|
}
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
track: track ?? null,
|
|
1444
|
-
previousTrack,
|
|
1445
|
-
encodings
|
|
1446
|
-
});
|
|
1644
|
+
constructor(...args) {
|
|
1645
|
+
super(...args), _define_property5(this, "stateUpdated", new Event3()), _define_property5(this, "_state", {
|
|
1646
|
+
pulledVideoStreams: {},
|
|
1647
|
+
pulledAudioTracks: {}
|
|
1648
|
+
}), _define_property5(this, "_speakingMonitor", void 0), _define_property5(this, "_trackToReconcile", []), _define_property5(this, "_blackCanvasStreamTrack", void 0), _define_property5(this, "_inaudibleAudioStreamTrack", void 0), _define_property5(this, "_pushTracksTask", void 0), _define_property5(this, "_pullTracksTask", void 0);
|
|
1447
1649
|
}
|
|
1448
1650
|
};
|
|
1449
1651
|
_ts_decorate2([
|
|
@@ -1457,16 +1659,29 @@ _ts_decorate2([
|
|
|
1457
1659
|
import { computed } from "@preact/signals-core";
|
|
1458
1660
|
import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
|
|
1459
1661
|
import { Resource as Resource5 } from "@dxos/context";
|
|
1460
|
-
import { invariant as
|
|
1662
|
+
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1461
1663
|
import { live } from "@dxos/live-object";
|
|
1462
1664
|
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
|
1665
|
+
function _define_property6(obj, key, value) {
|
|
1666
|
+
if (key in obj) {
|
|
1667
|
+
Object.defineProperty(obj, key, {
|
|
1668
|
+
value,
|
|
1669
|
+
enumerable: true,
|
|
1670
|
+
configurable: true,
|
|
1671
|
+
writable: true
|
|
1672
|
+
});
|
|
1673
|
+
} else {
|
|
1674
|
+
obj[key] = value;
|
|
1675
|
+
}
|
|
1676
|
+
return obj;
|
|
1677
|
+
}
|
|
1463
1678
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
1464
1679
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1465
1680
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1466
1681
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1467
1682
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1468
1683
|
}
|
|
1469
|
-
var
|
|
1684
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
|
|
1470
1685
|
var CallManager = class extends Resource5 {
|
|
1471
1686
|
/** @reactive */
|
|
1472
1687
|
get roomId() {
|
|
@@ -1546,31 +1761,6 @@ var CallManager = class extends Resource5 {
|
|
|
1546
1761
|
turnScreenshareOff() {
|
|
1547
1762
|
return this._mediaManager.turnScreenshareOff();
|
|
1548
1763
|
}
|
|
1549
|
-
// TODO(burdon): Can this be mocked?
|
|
1550
|
-
constructor(_client) {
|
|
1551
|
-
super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
|
|
1552
|
-
call: {},
|
|
1553
|
-
media: {
|
|
1554
|
-
pulledAudioTracks: {},
|
|
1555
|
-
pulledVideoStreams: {}
|
|
1556
|
-
}
|
|
1557
|
-
}), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
|
|
1558
|
-
this._client.config.getOrThrow("runtime.services.edge.url");
|
|
1559
|
-
const networkService = this._client.services.services.NetworkService;
|
|
1560
|
-
invariant3(networkService, "network service not found", {
|
|
1561
|
-
F: __dxlog_file5,
|
|
1562
|
-
L: 159,
|
|
1563
|
-
S: this,
|
|
1564
|
-
A: [
|
|
1565
|
-
"networkService",
|
|
1566
|
-
"'network service not found'"
|
|
1567
|
-
]
|
|
1568
|
-
});
|
|
1569
|
-
this._swarmSynchronizer = new CallSwarmSynchronizer({
|
|
1570
|
-
networkService
|
|
1571
|
-
});
|
|
1572
|
-
this._mediaManager = new MediaManager();
|
|
1573
|
-
}
|
|
1574
1764
|
async _open() {
|
|
1575
1765
|
await this._mediaManager.open();
|
|
1576
1766
|
await this._swarmSynchronizer.open();
|
|
@@ -1611,7 +1801,7 @@ var CallManager = class extends Resource5 {
|
|
|
1611
1801
|
this.roomId && this.left.emit(this.roomId);
|
|
1612
1802
|
}
|
|
1613
1803
|
_onCallStateUpdated(state) {
|
|
1614
|
-
const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self
|
|
1804
|
+
const tracksToPull = state.users?.filter((user) => user.joined && user.id !== state.self.id)?.flatMap((user) => [
|
|
1615
1805
|
user.tracks?.video,
|
|
1616
1806
|
user.tracks?.audio,
|
|
1617
1807
|
user.tracks?.screenshare
|
|
@@ -1644,6 +1834,37 @@ var CallManager = class extends Resource5 {
|
|
|
1644
1834
|
this._state.call = this._swarmSynchronizer._getState();
|
|
1645
1835
|
this._state.media = this._mediaManager._getState();
|
|
1646
1836
|
}
|
|
1837
|
+
// TODO(burdon): Can this be mocked?
|
|
1838
|
+
constructor(_client) {
|
|
1839
|
+
super(), _define_property6(this, "_client", void 0), _define_property6(this, "callStateUpdated", void 0), // TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
|
|
1840
|
+
_define_property6(this, "mediaStateUpdated", void 0), _define_property6(this, "left", void 0), /**
|
|
1841
|
+
* Live object state. Is changed on internal events.
|
|
1842
|
+
* CAUTION: Do not change directly.
|
|
1843
|
+
*/
|
|
1844
|
+
_define_property6(this, "_state", void 0), // TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
|
|
1845
|
+
_define_property6(this, "_raisedHandSignal", void 0), _define_property6(this, "_speakingSignal", void 0), _define_property6(this, "_joinedSignal", void 0), _define_property6(this, "_swarmSynchronizer", void 0), _define_property6(this, "_mediaManager", void 0), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
|
|
1846
|
+
call: {},
|
|
1847
|
+
media: {
|
|
1848
|
+
pulledAudioTracks: {},
|
|
1849
|
+
pulledVideoStreams: {}
|
|
1850
|
+
}
|
|
1851
|
+
}), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
|
|
1852
|
+
this._client.config.getOrThrow("runtime.services.edge.url");
|
|
1853
|
+
const networkService = this._client.services.services.NetworkService;
|
|
1854
|
+
invariant5(networkService, "network service not found", {
|
|
1855
|
+
F: __dxlog_file6,
|
|
1856
|
+
L: 159,
|
|
1857
|
+
S: this,
|
|
1858
|
+
A: [
|
|
1859
|
+
"networkService",
|
|
1860
|
+
"'network service not found'"
|
|
1861
|
+
]
|
|
1862
|
+
});
|
|
1863
|
+
this._swarmSynchronizer = new CallSwarmSynchronizer({
|
|
1864
|
+
networkService
|
|
1865
|
+
});
|
|
1866
|
+
this._mediaManager = new MediaManager();
|
|
1867
|
+
}
|
|
1647
1868
|
};
|
|
1648
1869
|
_ts_decorate3([
|
|
1649
1870
|
synchronized3
|
|
@@ -1666,4 +1887,4 @@ export {
|
|
|
1666
1887
|
MediaManager,
|
|
1667
1888
|
CallManager
|
|
1668
1889
|
};
|
|
1669
|
-
//# sourceMappingURL=chunk-
|
|
1890
|
+
//# sourceMappingURL=chunk-ZCEU5K23.mjs.map
|