@dxos/plugin-thread 0.8.4-main.28f8d3d → 0.8.4-main.406dc2a
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-AF3M7UWN.mjs → app-graph-builder-ODKIAXR7.mjs} +17 -17
- package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-XRRCAVLI.mjs → call-manager-BCKLI4QD.mjs} +7 -7
- package/dist/lib/browser/{call-manager-XRRCAVLI.mjs.map → call-manager-BCKLI4QD.mjs.map} +1 -1
- package/dist/lib/browser/chunk-2MUYQOQE.mjs +23 -0
- package/dist/lib/browser/{chunk-2CWJBXBH.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-ZJ7QBXK6.mjs → chunk-CMCVHULC.mjs} +17 -15
- 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-X5PIP5YR.mjs → chunk-HDEQRBOC.mjs} +37 -5
- package/dist/lib/{node-esm/chunk-SED3O2XO.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-DW7JD64V.mjs → chunk-VTYX3SIM.mjs} +26 -16
- package/dist/lib/browser/chunk-VTYX3SIM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-JGKMMI65.mjs → chunk-XYUJXHYV.mjs} +54 -4
- package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TUFWPOVS.mjs → chunk-ZCEU5K23.mjs} +460 -268
- package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +22 -13
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-DCY4P4OX.mjs → intent-resolver-VOQD3TQ2.mjs} +73 -15
- package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs.map +7 -0
- package/dist/lib/browser/{markdown-WZSXCEZJ.mjs → markdown-R6MGRIA6.mjs} +6 -6
- package/dist/lib/browser/{markdown-WZSXCEZJ.mjs.map → markdown-R6MGRIA6.mjs.map} +1 -1
- 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-PYAMIADB.mjs → react-surface-SXMQEWKE.mjs} +22 -22
- package/dist/lib/browser/react-surface-SXMQEWKE.mjs.map +7 -0
- package/dist/lib/browser/{settings-AC6YSASL.mjs → settings-TCNF54PN.mjs} +5 -5
- package/dist/lib/browser/{settings-AC6YSASL.mjs.map → settings-TCNF54PN.mjs.map} +1 -1
- package/dist/lib/browser/{state-2T4KDWBX.mjs → state-ZQ4IPOJT.mjs} +5 -5
- package/dist/lib/browser/{state-2T4KDWBX.mjs.map → state-ZQ4IPOJT.mjs.map} +1 -1
- 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-2CT4PJ7I.mjs → ChatContainer-SH6LTFQL.mjs} +6 -6
- package/dist/lib/node-esm/{app-graph-builder-OLSJVCWY.mjs → app-graph-builder-DMPT3MY6.mjs} +17 -17
- package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-EI7FXRAU.mjs → call-manager-Q7RY2YP4.mjs} +7 -7
- package/dist/lib/node-esm/{call-manager-EI7FXRAU.mjs.map → call-manager-Q7RY2YP4.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-YIDU3DXK.mjs → chunk-2KZ4ODHU.mjs} +17 -15
- package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SED3O2XO.mjs → chunk-2MMJF7DW.mjs} +37 -5
- package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-QBHKLWGR.mjs → chunk-2V3WSLUZ.mjs} +54 -4
- 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-XVKWHTH4.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-6CRHHOST.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-4TME3BR4.mjs → chunk-TIPIOH2J.mjs} +460 -268
- package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +22 -13
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-QGTPU6QB.mjs → intent-resolver-AKVH66PH.mjs} +73 -15
- package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-3MZXUGUA.mjs → markdown-MYGTDXT6.mjs} +6 -6
- package/dist/lib/node-esm/{markdown-3MZXUGUA.mjs.map → markdown-MYGTDXT6.mjs.map} +1 -1
- 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-UJFCSFNO.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-N52O7MLS.mjs → settings-ZQHGVFBY.mjs} +5 -5
- package/dist/lib/node-esm/{settings-N52O7MLS.mjs.map → settings-ZQHGVFBY.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-FSLLJ5TZ.mjs} +5 -5
- package/dist/lib/node-esm/{state-62TQKQVB.mjs.map → state-FSLLJ5TZ.mjs.map} +1 -1
- 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/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.map +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts +3 -1
- 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/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/react-root.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts +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/toolkit.d.ts +6 -0
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
- 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/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 +156 -4
- package/dist/types/src/components/Comments.stories.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/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/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/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/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 -111
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +259 -174
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +60 -58
- package/src/ThreadPlugin.tsx +128 -122
- package/src/calls/call-manager.ts +1 -1
- package/src/calls/media-manager.ts +58 -32
- package/src/calls/types.ts +7 -3
- package/src/calls/util/calls-service.ts +61 -11
- package/src/calls/util/stub-media-streams.ts +60 -3
- package/src/calls-service.stories.tsx +76 -63
- package/src/capabilities/app-graph-builder.ts +13 -10
- package/src/capabilities/capabilities.ts +5 -5
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/intent-resolver.ts +39 -6
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +9 -9
- package/src/capabilities/toolkit.ts +82 -0
- package/src/components/Call/Toolbar.tsx +4 -4
- package/src/components/CallDebugPanel.tsx +108 -49
- package/src/components/ChannelContainer.stories.tsx +9 -9
- package/src/components/ChannelContainer.tsx +1 -1
- package/src/components/Chat.stories.tsx +31 -29
- package/src/components/ChatContainer.tsx +4 -1
- package/src/components/Comments.stories.tsx +33 -35
- package/src/components/CommentsThreadContainer.tsx +8 -7
- package/src/components/Media/VideoObject.stories.tsx +35 -28
- package/src/components/MessageContainer.tsx +40 -7
- package/src/components/Participant/Participant.tsx +13 -7
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +5 -6
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +41 -40
- package/src/components/ThreadComplementary.tsx +36 -6
- package/src/components/ThreadSettings.tsx +6 -7
- package/src/components/command-extension.ts +4 -1
- package/src/components/testing.ts +22 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
- package/src/hooks/useVideoStreamTrack.tsx +6 -3
- package/src/meta.ts +3 -4
- package/src/testing/stories.ts +1 -1
- package/src/translations.ts +3 -1
- package/src/types/schema.ts +1 -1
- package/src/types/types.ts +21 -13
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/util.ts +1 -1
- package/dist/lib/browser/ChannelContainer-O2SFQJU7.mjs +0 -16
- package/dist/lib/browser/ChatContainer-PVT3DUZJ.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-AF3M7UWN.mjs.map +0 -7
- package/dist/lib/browser/chunk-2CWJBXBH.mjs +0 -21
- package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
- package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
- package/dist/lib/browser/chunk-DW7JD64V.mjs.map +0 -7
- package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
- package/dist/lib/browser/chunk-FY4ZRD5X.mjs +0 -367
- package/dist/lib/browser/chunk-FY4ZRD5X.mjs.map +0 -7
- package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
- package/dist/lib/browser/chunk-J3JO5NWO.mjs +0 -477
- package/dist/lib/browser/chunk-J3JO5NWO.mjs.map +0 -7
- package/dist/lib/browser/chunk-JGKMMI65.mjs.map +0 -7
- package/dist/lib/browser/chunk-TUFWPOVS.mjs.map +0 -7
- package/dist/lib/browser/chunk-X5PIP5YR.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZJ7QBXK6.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-DCY4P4OX.mjs.map +0 -7
- package/dist/lib/browser/react-root-QXPALOUQ.mjs +0 -28
- package/dist/lib/browser/react-root-QXPALOUQ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-PYAMIADB.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-B2ZGAE4P.mjs +0 -17
- package/dist/lib/node-esm/app-graph-builder-OLSJVCWY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4TME3BR4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6CRHHOST.mjs +0 -23
- package/dist/lib/node-esm/chunk-BF4UKS55.mjs +0 -368
- package/dist/lib/node-esm/chunk-BF4UKS55.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QBHKLWGR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-VNG6M2IY.mjs +0 -478
- package/dist/lib/node-esm/chunk-VNG6M2IY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XVKWHTH4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YIDU3DXK.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-QGTPU6QB.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-7ZFJYVUZ.mjs +0 -29
- package/dist/lib/node-esm/react-root-7ZFJYVUZ.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-UJFCSFNO.mjs.map +0 -7
- /package/dist/lib/browser/{ChannelContainer-O2SFQJU7.mjs.map → ChannelContainer-BGDGZHV4.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-PVT3DUZJ.mjs.map → ChatContainer-75KJZ4XR.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-B2ZGAE4P.mjs.map → ChannelContainer-OXC6BTU7.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-2CT4PJ7I.mjs.map → ChatContainer-SH6LTFQL.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,38 +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
|
-
stateUpdated = new Event();
|
|
54
|
-
_state = {
|
|
55
|
-
activities: {}
|
|
56
|
-
};
|
|
57
|
-
_networkService;
|
|
58
|
-
_lastSwarmEvent = void 0;
|
|
59
|
-
_reconcileSwarmStateTask = void 0;
|
|
60
|
-
_identityKey = void 0;
|
|
61
|
-
_deviceKey = void 0;
|
|
62
|
-
_displayName = void 0;
|
|
63
|
-
_swarmCtx = void 0;
|
|
64
|
-
_sendStateTask = void 0;
|
|
65
|
-
constructor({ networkService }) {
|
|
66
|
-
super();
|
|
67
|
-
this._networkService = networkService;
|
|
68
|
-
}
|
|
69
96
|
/**
|
|
70
97
|
* @internal
|
|
71
98
|
*/
|
|
@@ -131,7 +158,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
131
158
|
log.verbose("joined to a different room", {
|
|
132
159
|
roomId
|
|
133
160
|
}, {
|
|
134
|
-
F:
|
|
161
|
+
F: __dxlog_file2,
|
|
135
162
|
L: 152,
|
|
136
163
|
S: this,
|
|
137
164
|
C: (f, a) => f(...a)
|
|
@@ -153,8 +180,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
153
180
|
this._reconcileSwarmStateTask = void 0;
|
|
154
181
|
}
|
|
155
182
|
async join() {
|
|
156
|
-
|
|
157
|
-
F:
|
|
183
|
+
invariant2(this._state.roomId, void 0, {
|
|
184
|
+
F: __dxlog_file2,
|
|
158
185
|
L: 176,
|
|
159
186
|
S: this,
|
|
160
187
|
A: [
|
|
@@ -162,8 +189,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
162
189
|
""
|
|
163
190
|
]
|
|
164
191
|
});
|
|
165
|
-
|
|
166
|
-
F:
|
|
192
|
+
invariant2(!this._swarmCtx, "Already joined", {
|
|
193
|
+
F: __dxlog_file2,
|
|
167
194
|
L: 177,
|
|
168
195
|
S: this,
|
|
169
196
|
A: [
|
|
@@ -172,7 +199,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
172
199
|
]
|
|
173
200
|
});
|
|
174
201
|
this._swarmCtx = new Context(void 0, {
|
|
175
|
-
F:
|
|
202
|
+
F: __dxlog_file2,
|
|
176
203
|
L: 179
|
|
177
204
|
});
|
|
178
205
|
const topic = getTopic(this._state.roomId);
|
|
@@ -183,7 +210,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
183
210
|
peerKey: this._deviceKey
|
|
184
211
|
}
|
|
185
212
|
}, {
|
|
186
|
-
F:
|
|
213
|
+
F: __dxlog_file2,
|
|
187
214
|
L: 181,
|
|
188
215
|
S: this,
|
|
189
216
|
C: (f, a) => f(...a)
|
|
@@ -202,7 +229,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
202
229
|
peerKey: this._deviceKey
|
|
203
230
|
}
|
|
204
231
|
}, {
|
|
205
|
-
F:
|
|
232
|
+
F: __dxlog_file2,
|
|
206
233
|
L: 188,
|
|
207
234
|
S: this,
|
|
208
235
|
C: (f, a) => f(...a)
|
|
@@ -214,7 +241,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
214
241
|
peerKey: this._deviceKey
|
|
215
242
|
}
|
|
216
243
|
}).catch((err) => log.catch(err, void 0, {
|
|
217
|
-
F:
|
|
244
|
+
F: __dxlog_file2,
|
|
218
245
|
L: 194,
|
|
219
246
|
S: this,
|
|
220
247
|
C: (f, a) => f(...a)
|
|
@@ -282,8 +309,8 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
282
309
|
}
|
|
283
310
|
async _reconcileSwarmState() {
|
|
284
311
|
const swarmEvent = this._lastSwarmEvent;
|
|
285
|
-
|
|
286
|
-
F:
|
|
312
|
+
invariant2(swarmEvent, void 0, {
|
|
313
|
+
F: __dxlog_file2,
|
|
287
314
|
L: 273,
|
|
288
315
|
S: this,
|
|
289
316
|
A: [
|
|
@@ -303,7 +330,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
303
330
|
error,
|
|
304
331
|
peer
|
|
305
332
|
}, {
|
|
306
|
-
F:
|
|
333
|
+
F: __dxlog_file2,
|
|
307
334
|
L: 290,
|
|
308
335
|
S: this,
|
|
309
336
|
C: (f, a) => f(...a)
|
|
@@ -316,7 +343,7 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
316
343
|
log("reconciling swarm state", {
|
|
317
344
|
users
|
|
318
345
|
}, {
|
|
319
|
-
F:
|
|
346
|
+
F: __dxlog_file2,
|
|
320
347
|
L: 297,
|
|
321
348
|
S: this,
|
|
322
349
|
C: (f, a) => f(...a)
|
|
@@ -339,6 +366,12 @@ var CallSwarmSynchronizer = class extends Resource {
|
|
|
339
366
|
scheduleTaskInterval(this._ctx, async () => this._reconcileSwarmStateTask.schedule(), Math.min(DISCONNECTED_ABRUPT_TIMEOUT / 2, 1e3));
|
|
340
367
|
}
|
|
341
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
|
+
}
|
|
342
375
|
};
|
|
343
376
|
_ts_decorate([
|
|
344
377
|
synchronized
|
|
@@ -404,19 +437,26 @@ var monitorAudioLevel = ({ mediaStreamTrack, intervalMs = 1e3 / 10, onMeasure })
|
|
|
404
437
|
};
|
|
405
438
|
|
|
406
439
|
// src/calls/util/calls-service.ts
|
|
407
|
-
import { PersistentLifecycle } from "@dxos/async";
|
|
440
|
+
import { PersistentLifecycle, Trigger, scheduleTask } from "@dxos/async";
|
|
408
441
|
import { Resource as Resource2 } from "@dxos/context";
|
|
409
|
-
import { invariant as
|
|
442
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
|
410
443
|
import { log as log2 } from "@dxos/log";
|
|
411
444
|
|
|
412
445
|
// src/calls/util/history-cache.ts
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
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;
|
|
419
456
|
}
|
|
457
|
+
return obj;
|
|
458
|
+
}
|
|
459
|
+
var HistoryCache = class {
|
|
420
460
|
push(...messages) {
|
|
421
461
|
if (this._messages.length >= this._limit) {
|
|
422
462
|
this._messages.shift();
|
|
@@ -426,53 +466,98 @@ var HistoryCache = class {
|
|
|
426
466
|
get() {
|
|
427
467
|
return this._messages;
|
|
428
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
|
+
}
|
|
429
475
|
};
|
|
430
476
|
|
|
431
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
|
+
}
|
|
432
518
|
var DefaultBatchSizeLimit = 64;
|
|
519
|
+
var _schedulerChain = /* @__PURE__ */ new WeakMap();
|
|
433
520
|
var FIFOScheduler = class {
|
|
434
|
-
#schedulerChain;
|
|
435
|
-
constructor() {
|
|
436
|
-
this.#schedulerChain = Promise.resolve();
|
|
437
|
-
}
|
|
438
521
|
schedule(task) {
|
|
439
522
|
return new Promise((resolve, reject) => {
|
|
440
|
-
this
|
|
523
|
+
_class_private_field_set(this, _schedulerChain, _class_private_field_get(this, _schedulerChain).then(async () => {
|
|
441
524
|
try {
|
|
442
525
|
resolve(await task());
|
|
443
526
|
} catch (error) {
|
|
444
527
|
reject(error);
|
|
445
528
|
}
|
|
446
|
-
});
|
|
529
|
+
}));
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
constructor() {
|
|
533
|
+
_class_private_field_init(this, _schedulerChain, {
|
|
534
|
+
writable: true,
|
|
535
|
+
value: void 0
|
|
447
536
|
});
|
|
537
|
+
_class_private_field_set(this, _schedulerChain, Promise.resolve());
|
|
448
538
|
}
|
|
449
539
|
};
|
|
540
|
+
var _currentBatch = /* @__PURE__ */ new WeakMap();
|
|
541
|
+
var _currentBulkResponse = /* @__PURE__ */ new WeakMap();
|
|
542
|
+
var _batchSizeLimit = /* @__PURE__ */ new WeakMap();
|
|
450
543
|
var BulkRequestDispatcher = class {
|
|
451
|
-
#currentBatch;
|
|
452
|
-
#currentBulkResponse;
|
|
453
|
-
#batchSizeLimit;
|
|
454
|
-
constructor(batchSizeLimit = DefaultBatchSizeLimit) {
|
|
455
|
-
this.#currentBatch = [];
|
|
456
|
-
this.#currentBulkResponse = null;
|
|
457
|
-
this.#batchSizeLimit = batchSizeLimit;
|
|
458
|
-
}
|
|
459
544
|
/**
|
|
460
545
|
* Returns a bulk response promise.
|
|
461
546
|
* At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
|
|
462
547
|
*/
|
|
463
548
|
doBulkRequest(params, bulkRequestFunc) {
|
|
464
|
-
if (this
|
|
465
|
-
this
|
|
466
|
-
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);
|
|
467
552
|
}
|
|
468
|
-
this
|
|
469
|
-
if (this
|
|
470
|
-
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);
|
|
471
556
|
}
|
|
472
|
-
const batch = this
|
|
473
|
-
this
|
|
557
|
+
const batch = _class_private_field_get(this, _currentBatch);
|
|
558
|
+
_class_private_field_set(this, _currentBulkResponse, new Promise((resolve, reject) => {
|
|
474
559
|
setTimeout(() => {
|
|
475
|
-
this
|
|
560
|
+
_class_private_field_set(this, _currentBulkResponse, null);
|
|
476
561
|
const batchCopy = batch.splice(0, batch.length);
|
|
477
562
|
bulkRequestFunc(batchCopy).then((result) => {
|
|
478
563
|
resolve(result);
|
|
@@ -480,29 +565,45 @@ var BulkRequestDispatcher = class {
|
|
|
480
565
|
reject(err);
|
|
481
566
|
});
|
|
482
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
|
|
575
|
+
});
|
|
576
|
+
_class_private_field_init(this, _currentBulkResponse, {
|
|
577
|
+
writable: true,
|
|
578
|
+
value: void 0
|
|
483
579
|
});
|
|
484
|
-
|
|
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);
|
|
485
587
|
}
|
|
486
588
|
};
|
|
487
589
|
|
|
488
590
|
// src/calls/util/calls-service.ts
|
|
489
|
-
|
|
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
|
|
598
|
+
});
|
|
599
|
+
} else {
|
|
600
|
+
obj[key] = value;
|
|
601
|
+
}
|
|
602
|
+
return obj;
|
|
603
|
+
}
|
|
604
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/calls-service.ts";
|
|
490
605
|
var NETWORK_TIMEOUT = 5e3;
|
|
491
606
|
var CallsServicePeer = class extends Resource2 {
|
|
492
|
-
history = new HistoryCache(100);
|
|
493
|
-
_persistentLifecycle = new PersistentLifecycle({
|
|
494
|
-
start: () => this._startSession(),
|
|
495
|
-
stop: (session) => this._stopSession(session)
|
|
496
|
-
});
|
|
497
|
-
_config;
|
|
498
|
-
taskScheduler = new FIFOScheduler();
|
|
499
|
-
pushTrackDispatcher = new BulkRequestDispatcher(32);
|
|
500
|
-
pullTrackDispatcher = new BulkRequestDispatcher(32);
|
|
501
|
-
closeTrackDispatcher = new BulkRequestDispatcher(32);
|
|
502
|
-
constructor(config) {
|
|
503
|
-
super();
|
|
504
|
-
this._config = config;
|
|
505
|
-
}
|
|
506
607
|
async _open(ctx) {
|
|
507
608
|
await this._persistentLifecycle.open(ctx);
|
|
508
609
|
}
|
|
@@ -530,11 +631,11 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
530
631
|
});
|
|
531
632
|
peerConnection.addEventListener("connectionstatechange", () => {
|
|
532
633
|
if (peerConnection.connectionState === "failed" || peerConnection.connectionState === "closed") {
|
|
533
|
-
log2.
|
|
634
|
+
log2.info("calls connection failed", {
|
|
534
635
|
state: peerConnection.connectionState
|
|
535
636
|
}, {
|
|
536
|
-
F:
|
|
537
|
-
L:
|
|
637
|
+
F: __dxlog_file3,
|
|
638
|
+
L: 121,
|
|
538
639
|
S: this,
|
|
539
640
|
C: (f, a) => f(...a)
|
|
540
641
|
});
|
|
@@ -545,11 +646,11 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
545
646
|
peerConnection.addEventListener("iceconnectionstatechange", () => {
|
|
546
647
|
clearTimeout(iceTimeout);
|
|
547
648
|
if (peerConnection.iceConnectionState === "failed" || peerConnection.iceConnectionState === "closed") {
|
|
548
|
-
log2.
|
|
649
|
+
log2.info("calls connection to ICEs failed", {
|
|
549
650
|
state: peerConnection.iceConnectionState
|
|
550
651
|
}, {
|
|
551
|
-
F:
|
|
552
|
-
L:
|
|
652
|
+
F: __dxlog_file3,
|
|
653
|
+
L: 130,
|
|
553
654
|
S: this,
|
|
554
655
|
C: (f, a) => f(...a)
|
|
555
656
|
});
|
|
@@ -559,19 +660,19 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
559
660
|
iceTimeout = window.setTimeout(() => {
|
|
560
661
|
if (peerConnection.iceConnectionState === "connected") {
|
|
561
662
|
log2.info("calls iceConnectionState is connected", void 0, {
|
|
562
|
-
F:
|
|
563
|
-
L:
|
|
663
|
+
F: __dxlog_file3,
|
|
664
|
+
L: 139,
|
|
564
665
|
S: this,
|
|
565
666
|
C: (f, a) => f(...a)
|
|
566
667
|
});
|
|
567
668
|
return;
|
|
568
669
|
}
|
|
569
|
-
log2.
|
|
670
|
+
log2.info("calls iceConnectionState timed out", {
|
|
570
671
|
state: peerConnection.iceConnectionState,
|
|
571
672
|
timeoutSeconds
|
|
572
673
|
}, {
|
|
573
|
-
F:
|
|
574
|
-
L:
|
|
674
|
+
F: __dxlog_file3,
|
|
675
|
+
L: 143,
|
|
575
676
|
S: this,
|
|
576
677
|
C: (f, a) => f(...a)
|
|
577
678
|
});
|
|
@@ -583,8 +684,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
583
684
|
}
|
|
584
685
|
async _initiateCallSession() {
|
|
585
686
|
log2("creating new session", void 0, {
|
|
586
|
-
F:
|
|
587
|
-
L:
|
|
687
|
+
F: __dxlog_file3,
|
|
688
|
+
L: 153,
|
|
588
689
|
S: this,
|
|
589
690
|
C: (f, a) => f(...a)
|
|
590
691
|
});
|
|
@@ -595,6 +696,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
595
696
|
}
|
|
596
697
|
async _fetch(relativePath, requestInit) {
|
|
597
698
|
this.history.push({
|
|
699
|
+
endpoint: relativePath,
|
|
598
700
|
type: "request",
|
|
599
701
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
600
702
|
method: requestInit?.method ?? "GET",
|
|
@@ -609,8 +711,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
609
711
|
status: response.status,
|
|
610
712
|
text: await response.text()
|
|
611
713
|
}, {
|
|
612
|
-
F:
|
|
613
|
-
L:
|
|
714
|
+
F: __dxlog_file3,
|
|
715
|
+
L: 169,
|
|
614
716
|
S: this,
|
|
615
717
|
C: (f, a) => f(...a)
|
|
616
718
|
});
|
|
@@ -619,6 +721,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
619
721
|
try {
|
|
620
722
|
const data = await response.clone().json();
|
|
621
723
|
this.history.push({
|
|
724
|
+
endpoint: relativePath,
|
|
622
725
|
type: "response",
|
|
623
726
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
624
727
|
status: response.status,
|
|
@@ -631,6 +734,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
631
734
|
} catch (error) {
|
|
632
735
|
const text = await response.text();
|
|
633
736
|
this.history.push({
|
|
737
|
+
endpoint: relativePath,
|
|
634
738
|
type: "response",
|
|
635
739
|
time: (/* @__PURE__ */ new Date()).toISOString(),
|
|
636
740
|
status: response.status,
|
|
@@ -641,8 +745,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
641
745
|
text,
|
|
642
746
|
status: response.status
|
|
643
747
|
}, {
|
|
644
|
-
F:
|
|
645
|
-
L:
|
|
748
|
+
F: __dxlog_file3,
|
|
749
|
+
L: 196,
|
|
646
750
|
S: this,
|
|
647
751
|
C: (f, a) => f(...a)
|
|
648
752
|
});
|
|
@@ -651,8 +755,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
651
755
|
}
|
|
652
756
|
async _pushTrackInBulk({ ctx, peerConnection, transceiver, sessionId, trackName }) {
|
|
653
757
|
log2.verbose("pushing track ", trackName, {
|
|
654
|
-
F:
|
|
655
|
-
L:
|
|
758
|
+
F: __dxlog_file3,
|
|
759
|
+
L: 218,
|
|
656
760
|
S: this,
|
|
657
761
|
C: (f, a) => f(...a)
|
|
658
762
|
});
|
|
@@ -677,9 +781,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
677
781
|
}))
|
|
678
782
|
})
|
|
679
783
|
});
|
|
680
|
-
|
|
681
|
-
F:
|
|
682
|
-
L:
|
|
784
|
+
invariant3(response.tracks !== void 0, void 0, {
|
|
785
|
+
F: __dxlog_file3,
|
|
786
|
+
L: 243,
|
|
683
787
|
S: this,
|
|
684
788
|
A: [
|
|
685
789
|
"response.tracks !== undefined",
|
|
@@ -693,7 +797,7 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
693
797
|
return {
|
|
694
798
|
tracks: response.tracks
|
|
695
799
|
};
|
|
696
|
-
})).then(({ tracks }) => {
|
|
800
|
+
})).then(async ({ tracks }) => {
|
|
697
801
|
const trackData = tracks.find((t) => t.mid === transceiver.mid);
|
|
698
802
|
if (trackData) {
|
|
699
803
|
return {
|
|
@@ -703,19 +807,12 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
703
807
|
};
|
|
704
808
|
} else {
|
|
705
809
|
log2.error("missing track data", void 0, {
|
|
706
|
-
F:
|
|
707
|
-
L:
|
|
810
|
+
F: __dxlog_file3,
|
|
811
|
+
L: 267,
|
|
708
812
|
S: this,
|
|
709
813
|
C: (f, a) => f(...a)
|
|
710
814
|
});
|
|
711
815
|
}
|
|
712
|
-
}).catch((err) => {
|
|
713
|
-
log2.catch(err, void 0, {
|
|
714
|
-
F: __dxlog_file2,
|
|
715
|
-
L: 262,
|
|
716
|
-
S: this,
|
|
717
|
-
C: (f, a) => f(...a)
|
|
718
|
-
});
|
|
719
816
|
});
|
|
720
817
|
const onDispose = async () => {
|
|
721
818
|
if (transceiver.mid) {
|
|
@@ -728,9 +825,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
728
825
|
}
|
|
729
826
|
async pushTrack({ track, encodings = [], ctx, previousTrack }) {
|
|
730
827
|
await this.waitUntilOpen();
|
|
731
|
-
|
|
732
|
-
F:
|
|
733
|
-
L:
|
|
828
|
+
invariant3(this.session, void 0, {
|
|
829
|
+
F: __dxlog_file3,
|
|
830
|
+
L: 295,
|
|
734
831
|
S: this,
|
|
735
832
|
A: [
|
|
736
833
|
"this.session",
|
|
@@ -742,8 +839,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
742
839
|
previousTrack,
|
|
743
840
|
encodings
|
|
744
841
|
}, {
|
|
745
|
-
F:
|
|
746
|
-
L:
|
|
842
|
+
F: __dxlog_file3,
|
|
843
|
+
L: 296,
|
|
747
844
|
S: this,
|
|
748
845
|
C: (f, a) => f(...a)
|
|
749
846
|
});
|
|
@@ -755,8 +852,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
755
852
|
previousTrack,
|
|
756
853
|
transceiver: transceiver2
|
|
757
854
|
}, {
|
|
758
|
-
F:
|
|
759
|
-
L:
|
|
855
|
+
F: __dxlog_file3,
|
|
856
|
+
L: 300,
|
|
760
857
|
S: this,
|
|
761
858
|
C: (f, a) => f(...a)
|
|
762
859
|
});
|
|
@@ -767,23 +864,23 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
767
864
|
previousTrack,
|
|
768
865
|
transceiver: transceiver2
|
|
769
866
|
}, {
|
|
770
|
-
F:
|
|
771
|
-
L:
|
|
867
|
+
F: __dxlog_file3,
|
|
868
|
+
L: 303,
|
|
772
869
|
S: this,
|
|
773
870
|
C: (f, a) => f(...a)
|
|
774
871
|
});
|
|
775
872
|
transceiver2.sender.replaceTrack(track).catch((err) => log2.catch(err, void 0, {
|
|
776
|
-
F:
|
|
777
|
-
L:
|
|
873
|
+
F: __dxlog_file3,
|
|
874
|
+
L: 304,
|
|
778
875
|
S: this,
|
|
779
876
|
C: (f, a) => f(...a)
|
|
780
877
|
}));
|
|
781
878
|
return previousTrack;
|
|
782
879
|
}
|
|
783
880
|
}
|
|
784
|
-
|
|
785
|
-
F:
|
|
786
|
-
L:
|
|
881
|
+
invariant3(track, void 0, {
|
|
882
|
+
F: __dxlog_file3,
|
|
883
|
+
L: 308,
|
|
787
884
|
S: this,
|
|
788
885
|
A: [
|
|
789
886
|
"track",
|
|
@@ -795,8 +892,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
795
892
|
direction: "sendonly"
|
|
796
893
|
});
|
|
797
894
|
log2.verbose("creating transceiver", void 0, {
|
|
798
|
-
F:
|
|
799
|
-
L:
|
|
895
|
+
F: __dxlog_file3,
|
|
896
|
+
L: 313,
|
|
800
897
|
S: this,
|
|
801
898
|
C: (f, a) => f(...a)
|
|
802
899
|
});
|
|
@@ -807,9 +904,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
807
904
|
sessionId: this.session.sessionId,
|
|
808
905
|
trackName: stableId
|
|
809
906
|
});
|
|
810
|
-
|
|
811
|
-
F:
|
|
812
|
-
L:
|
|
907
|
+
invariant3(pushedTrackData, void 0, {
|
|
908
|
+
F: __dxlog_file3,
|
|
909
|
+
L: 322,
|
|
813
910
|
S: this,
|
|
814
911
|
A: [
|
|
815
912
|
"pushedTrackData",
|
|
@@ -825,8 +922,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
825
922
|
};
|
|
826
923
|
});
|
|
827
924
|
transceiver.sender.setParameters(parameters).catch((err) => log2.catch(err, void 0, {
|
|
828
|
-
F:
|
|
829
|
-
L:
|
|
925
|
+
F: __dxlog_file3,
|
|
926
|
+
L: 329,
|
|
830
927
|
S: this,
|
|
831
928
|
C: (f, a) => f(...a)
|
|
832
929
|
}));
|
|
@@ -838,8 +935,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
838
935
|
log2("pulling track", {
|
|
839
936
|
trackName: trackData.trackName
|
|
840
937
|
}, {
|
|
841
|
-
F:
|
|
842
|
-
L:
|
|
938
|
+
F: __dxlog_file3,
|
|
939
|
+
L: 347,
|
|
843
940
|
S: this,
|
|
844
941
|
C: (f, a) => f(...a)
|
|
845
942
|
});
|
|
@@ -853,9 +950,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
853
950
|
if (newTrackResponse.errorCode) {
|
|
854
951
|
throw new Error(newTrackResponse.errorDescription);
|
|
855
952
|
}
|
|
856
|
-
|
|
857
|
-
F:
|
|
858
|
-
L:
|
|
953
|
+
invariant3(newTrackResponse.tracks, void 0, {
|
|
954
|
+
F: __dxlog_file3,
|
|
955
|
+
L: 360,
|
|
859
956
|
S: this,
|
|
860
957
|
A: [
|
|
861
958
|
"newTrackResponse.tracks",
|
|
@@ -901,18 +998,18 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
901
998
|
mid = trackInfo.mid;
|
|
902
999
|
return track;
|
|
903
1000
|
}).catch((err) => log2.catch(err, void 0, {
|
|
904
|
-
F:
|
|
905
|
-
L:
|
|
1001
|
+
F: __dxlog_file3,
|
|
1002
|
+
L: 412,
|
|
906
1003
|
S: this,
|
|
907
1004
|
C: (f, a) => f(...a)
|
|
908
1005
|
}));
|
|
909
1006
|
} else {
|
|
910
|
-
log2.
|
|
1007
|
+
log2.info("missing track info", {
|
|
911
1008
|
trackData,
|
|
912
1009
|
availableTracks: Array.from(trackMap.keys())
|
|
913
1010
|
}, {
|
|
914
|
-
F:
|
|
915
|
-
L:
|
|
1011
|
+
F: __dxlog_file3,
|
|
1012
|
+
L: 414,
|
|
916
1013
|
S: this,
|
|
917
1014
|
C: (f, a) => f(...a)
|
|
918
1015
|
});
|
|
@@ -921,8 +1018,8 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
921
1018
|
const onDispose = async () => {
|
|
922
1019
|
if (mid) {
|
|
923
1020
|
log2("closing pulled track ", trackData.trackName, {
|
|
924
|
-
F:
|
|
925
|
-
L:
|
|
1021
|
+
F: __dxlog_file3,
|
|
1022
|
+
L: 420,
|
|
926
1023
|
S: this,
|
|
927
1024
|
C: (f, a) => f(...a)
|
|
928
1025
|
});
|
|
@@ -936,9 +1033,9 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
936
1033
|
}
|
|
937
1034
|
async pullTrack({ ctx, trackData }) {
|
|
938
1035
|
await this.waitUntilOpen();
|
|
939
|
-
|
|
940
|
-
F:
|
|
941
|
-
L:
|
|
1036
|
+
invariant3(this.session, void 0, {
|
|
1037
|
+
F: __dxlog_file3,
|
|
1038
|
+
L: 441,
|
|
942
1039
|
S: this,
|
|
943
1040
|
A: [
|
|
944
1041
|
"this.session",
|
|
@@ -990,6 +1087,13 @@ var CallsServicePeer = class extends Resource2 {
|
|
|
990
1087
|
}
|
|
991
1088
|
}));
|
|
992
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
|
+
}
|
|
993
1097
|
};
|
|
994
1098
|
var resolveTrack = async (peerConnection, compare, timeout = NETWORK_TIMEOUT) => new Promise((resolve, reject) => {
|
|
995
1099
|
setTimeout(reject, timeout);
|
|
@@ -1024,9 +1128,9 @@ var peerConnectionIsConnected = async (peerConnection) => {
|
|
|
1024
1128
|
|
|
1025
1129
|
// src/calls/util/media.ts
|
|
1026
1130
|
import { log as log3 } from "@dxos/log";
|
|
1027
|
-
var
|
|
1131
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/media.ts";
|
|
1028
1132
|
var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
|
|
1029
|
-
deviceList
|
|
1133
|
+
deviceList ?? (deviceList = (await getDeviceList()).filter((device) => device.kind === kind));
|
|
1030
1134
|
const firstDevice = deviceList[0];
|
|
1031
1135
|
if (!firstDevice) {
|
|
1032
1136
|
throw new Error("No devices found");
|
|
@@ -1036,7 +1140,7 @@ var getUserMediaTrack = async (kind, constraints = {}, deviceList) => {
|
|
|
1036
1140
|
var acquireTrack = async (device, constraints) => {
|
|
1037
1141
|
const { deviceId, label } = device;
|
|
1038
1142
|
log3.info(`requesting ${label}`, void 0, {
|
|
1039
|
-
F:
|
|
1143
|
+
F: __dxlog_file4,
|
|
1040
1144
|
L: 23,
|
|
1041
1145
|
S: void 0,
|
|
1042
1146
|
C: (f, a) => f(...a)
|
|
@@ -1081,26 +1185,24 @@ var getScreenshare = async ({ contentHint }) => {
|
|
|
1081
1185
|
// src/calls/speaking-monitor.ts
|
|
1082
1186
|
import { DeferredTask as DeferredTask2, Event as Event2, sleep } from "@dxos/async";
|
|
1083
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
|
+
}
|
|
1084
1201
|
var NOT_SPEAKING_AFTER = 500;
|
|
1085
1202
|
var START_SPEAKING_THRESHOLD = 0.05;
|
|
1086
1203
|
var CONTINUE_SPEAKING_THRESHOLD = 0.02;
|
|
1087
1204
|
var MIN_EVENT_INTERVAL = 100;
|
|
1088
1205
|
var SpeakingMonitor = class extends Resource3 {
|
|
1089
|
-
_mediaStreamTrack;
|
|
1090
|
-
/**
|
|
1091
|
-
* Event that is emitted when the user starts or stops speaking.
|
|
1092
|
-
* It is debounced to prevent rapid state changes.
|
|
1093
|
-
*/
|
|
1094
|
-
speakingChanged;
|
|
1095
|
-
/**
|
|
1096
|
-
* Real state of the user speaking.
|
|
1097
|
-
*/
|
|
1098
|
-
_isSpeaking;
|
|
1099
|
-
_lastEventTime;
|
|
1100
|
-
_deferredUpdate;
|
|
1101
|
-
constructor(_mediaStreamTrack) {
|
|
1102
|
-
super(), this._mediaStreamTrack = _mediaStreamTrack, this.speakingChanged = new Event2(), this._isSpeaking = false, this._lastEventTime = 0;
|
|
1103
|
-
}
|
|
1104
1206
|
get isSpeaking() {
|
|
1105
1207
|
return this._isSpeaking;
|
|
1106
1208
|
}
|
|
@@ -1144,37 +1246,50 @@ var SpeakingMonitor = class extends Resource3 {
|
|
|
1144
1246
|
this._lastEventTime = Date.now();
|
|
1145
1247
|
this.speakingChanged.emit(this._isSpeaking);
|
|
1146
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
|
+
}
|
|
1147
1259
|
};
|
|
1148
1260
|
|
|
1149
1261
|
// src/calls/media-manager.ts
|
|
1150
1262
|
import { DeferredTask as DeferredTask3, Event as Event3, sleep as sleep2, synchronized as synchronized2 } from "@dxos/async";
|
|
1151
1263
|
import { Resource as Resource4, cancelWithContext } from "@dxos/context";
|
|
1264
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
|
1152
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
|
+
}
|
|
1153
1279
|
function _ts_decorate2(decorators, target, key, desc) {
|
|
1154
1280
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1155
1281
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1156
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;
|
|
1157
1283
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1158
1284
|
}
|
|
1159
|
-
var
|
|
1285
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/media-manager.ts";
|
|
1160
1286
|
var VIDEO_WIDTH = 1280;
|
|
1161
1287
|
var VIDEO_HEIGHT = 720;
|
|
1162
1288
|
var MAX_WEB_CAM_FRAMERATE = 24;
|
|
1163
1289
|
var MAX_WEB_CAM_BITRATE = 12e5;
|
|
1164
|
-
var RETRY_INTERVAL =
|
|
1165
|
-
var USE_INAUDIBLE_AUDIO =
|
|
1290
|
+
var RETRY_INTERVAL = 100;
|
|
1291
|
+
var USE_INAUDIBLE_AUDIO = true;
|
|
1166
1292
|
var MediaManager = class extends Resource4 {
|
|
1167
|
-
stateUpdated = new Event3();
|
|
1168
|
-
_state = {
|
|
1169
|
-
pulledVideoStreams: {},
|
|
1170
|
-
pulledAudioTracks: {}
|
|
1171
|
-
};
|
|
1172
|
-
_speakingMonitor = void 0;
|
|
1173
|
-
_trackToReconcile = [];
|
|
1174
|
-
_blackCanvasStreamTrack = void 0;
|
|
1175
|
-
_inaudibleAudioStreamTrack = void 0;
|
|
1176
|
-
_pushTracksTask = void 0;
|
|
1177
|
-
_pullTracksTask = void 0;
|
|
1178
1293
|
get isSpeaking() {
|
|
1179
1294
|
return this._speakingMonitor?.isSpeaking;
|
|
1180
1295
|
}
|
|
@@ -1313,8 +1428,8 @@ var MediaManager = class extends Resource4 {
|
|
|
1313
1428
|
}
|
|
1314
1429
|
async _reconcilePulledMedia() {
|
|
1315
1430
|
log4("reconciling tracks", void 0, {
|
|
1316
|
-
F:
|
|
1317
|
-
L:
|
|
1431
|
+
F: __dxlog_file5,
|
|
1432
|
+
L: 223,
|
|
1318
1433
|
S: this,
|
|
1319
1434
|
C: (f, a) => f(...a)
|
|
1320
1435
|
});
|
|
@@ -1331,12 +1446,12 @@ var MediaManager = class extends Resource4 {
|
|
|
1331
1446
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
1332
1447
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
|
|
1333
1448
|
}, {
|
|
1334
|
-
F:
|
|
1335
|
-
L:
|
|
1449
|
+
F: __dxlog_file5,
|
|
1450
|
+
L: 242,
|
|
1336
1451
|
S: this,
|
|
1337
1452
|
C: (f, a) => f(...a)
|
|
1338
1453
|
});
|
|
1339
|
-
await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
|
|
1454
|
+
const pullResults = await Promise.all(tracksToPull.map((name) => this._pullTrack(name)));
|
|
1340
1455
|
await Promise.all([
|
|
1341
1456
|
...audioTracksToClose,
|
|
1342
1457
|
...videoStreamsToClose
|
|
@@ -1345,55 +1460,102 @@ var MediaManager = class extends Resource4 {
|
|
|
1345
1460
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
1346
1461
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams)
|
|
1347
1462
|
}, {
|
|
1348
|
-
F:
|
|
1349
|
-
L:
|
|
1463
|
+
F: __dxlog_file5,
|
|
1464
|
+
L: 257,
|
|
1350
1465
|
S: this,
|
|
1351
1466
|
C: (f, a) => f(...a)
|
|
1352
1467
|
});
|
|
1353
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
|
+
}
|
|
1354
1490
|
}
|
|
1355
1491
|
async _pushTracks() {
|
|
1356
1492
|
if (!this._state.peer?.isOpen) {
|
|
1357
1493
|
return;
|
|
1358
1494
|
}
|
|
1359
1495
|
let updated = false;
|
|
1360
|
-
const [
|
|
1361
|
-
this.
|
|
1496
|
+
const [pushVideoResult, pushAudioResult, pushScreenshareResult] = await Promise.all([
|
|
1497
|
+
this._maybePushTrack(this._state.videoTrack, this._state.pushedVideoTrack, [
|
|
1362
1498
|
{
|
|
1363
1499
|
maxFramerate: MAX_WEB_CAM_FRAMERATE,
|
|
1364
1500
|
maxBitrate: MAX_WEB_CAM_BITRATE
|
|
1365
1501
|
}
|
|
1366
1502
|
]),
|
|
1367
|
-
this.
|
|
1503
|
+
this._maybePushTrack(this._state.audioTrack, this._state.pushedAudioTrack, [
|
|
1368
1504
|
{
|
|
1369
1505
|
networkPriority: "high"
|
|
1370
1506
|
}
|
|
1371
1507
|
]),
|
|
1372
|
-
this.
|
|
1508
|
+
this._maybePushTrack(this._state.screenshareTrack, this._state.pushedScreenshareTrack)
|
|
1373
1509
|
]);
|
|
1374
|
-
if (
|
|
1375
|
-
this._state.pushedVideoTrack =
|
|
1510
|
+
if (pushVideoResult.track !== this._state.pushedVideoTrack) {
|
|
1511
|
+
this._state.pushedVideoTrack = pushVideoResult.track;
|
|
1376
1512
|
updated = true;
|
|
1377
1513
|
}
|
|
1378
|
-
if (
|
|
1379
|
-
this._state.pushedAudioTrack =
|
|
1514
|
+
if (pushAudioResult.track !== this._state.pushedAudioTrack) {
|
|
1515
|
+
this._state.pushedAudioTrack = pushAudioResult.track;
|
|
1380
1516
|
updated = true;
|
|
1381
1517
|
}
|
|
1382
|
-
if (
|
|
1383
|
-
this._state.pushedScreenshareTrack =
|
|
1518
|
+
if (pushScreenshareResult.track !== this._state.pushedScreenshareTrack) {
|
|
1519
|
+
this._state.pushedScreenshareTrack = pushScreenshareResult.track;
|
|
1384
1520
|
updated = true;
|
|
1385
1521
|
}
|
|
1386
|
-
|
|
1387
|
-
|
|
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();
|
|
1388
1548
|
}
|
|
1389
|
-
this.stateUpdated.emit(this._state);
|
|
1390
1549
|
}
|
|
1391
1550
|
async _pullTrack(name) {
|
|
1392
1551
|
const ctx = this._ctx.derive();
|
|
1393
1552
|
try {
|
|
1394
1553
|
const trackData = TrackNameCodec.decode(name);
|
|
1395
1554
|
const track = await this._state.peer.pullTrack({
|
|
1396
|
-
trackData
|
|
1555
|
+
trackData: {
|
|
1556
|
+
...trackData,
|
|
1557
|
+
mid: void 0
|
|
1558
|
+
},
|
|
1397
1559
|
ctx
|
|
1398
1560
|
});
|
|
1399
1561
|
if (track?.readyState === "ended") {
|
|
@@ -1406,7 +1568,9 @@ var MediaManager = class extends Resource4 {
|
|
|
1406
1568
|
ctx
|
|
1407
1569
|
};
|
|
1408
1570
|
ctx.onDispose(() => delete this._state.pulledAudioTracks[name]);
|
|
1409
|
-
|
|
1571
|
+
return {
|
|
1572
|
+
shouldRetry: false
|
|
1573
|
+
};
|
|
1410
1574
|
}
|
|
1411
1575
|
case "video": {
|
|
1412
1576
|
const mediaStream = new MediaStream();
|
|
@@ -1420,43 +1584,68 @@ var MediaManager = class extends Resource4 {
|
|
|
1420
1584
|
track.stop();
|
|
1421
1585
|
delete this._state.pulledVideoStreams[name];
|
|
1422
1586
|
});
|
|
1423
|
-
|
|
1587
|
+
return {
|
|
1588
|
+
shouldRetry: false
|
|
1589
|
+
};
|
|
1424
1590
|
}
|
|
1425
1591
|
default:
|
|
1426
1592
|
throw new Error(`Invalid track kind: ${track?.kind}`);
|
|
1427
1593
|
}
|
|
1428
1594
|
} catch (err) {
|
|
1429
|
-
log4.
|
|
1595
|
+
log4.info("failed to pull track", {
|
|
1430
1596
|
err,
|
|
1431
1597
|
name
|
|
1432
1598
|
}, {
|
|
1433
|
-
F:
|
|
1434
|
-
L:
|
|
1599
|
+
F: __dxlog_file5,
|
|
1600
|
+
L: 343,
|
|
1435
1601
|
S: this,
|
|
1436
1602
|
C: (f, a) => f(...a)
|
|
1437
1603
|
});
|
|
1438
1604
|
void ctx.dispose();
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
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
|
|
1442
1632
|
}, {
|
|
1443
|
-
F:
|
|
1444
|
-
L:
|
|
1633
|
+
F: __dxlog_file5,
|
|
1634
|
+
L: 370,
|
|
1445
1635
|
S: this,
|
|
1446
1636
|
C: (f, a) => f(...a)
|
|
1447
1637
|
});
|
|
1448
|
-
|
|
1638
|
+
void ctx.dispose();
|
|
1639
|
+
return {
|
|
1640
|
+
shouldRetry: true
|
|
1641
|
+
};
|
|
1449
1642
|
}
|
|
1450
1643
|
}
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
track: track ?? null,
|
|
1457
|
-
previousTrack,
|
|
1458
|
-
encodings
|
|
1459
|
-
});
|
|
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);
|
|
1460
1649
|
}
|
|
1461
1650
|
};
|
|
1462
1651
|
_ts_decorate2([
|
|
@@ -1470,33 +1659,30 @@ _ts_decorate2([
|
|
|
1470
1659
|
import { computed } from "@preact/signals-core";
|
|
1471
1660
|
import { Event as Event4, synchronized as synchronized3 } from "@dxos/async";
|
|
1472
1661
|
import { Resource as Resource5 } from "@dxos/context";
|
|
1473
|
-
import { invariant as
|
|
1662
|
+
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1474
1663
|
import { live } from "@dxos/live-object";
|
|
1475
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
|
+
}
|
|
1476
1678
|
function _ts_decorate3(decorators, target, key, desc) {
|
|
1477
1679
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1478
1680
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1479
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;
|
|
1480
1682
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1481
1683
|
}
|
|
1482
|
-
var
|
|
1684
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/call-manager.ts";
|
|
1483
1685
|
var CallManager = class extends Resource5 {
|
|
1484
|
-
_client;
|
|
1485
|
-
callStateUpdated;
|
|
1486
|
-
// TODO(wittjosiah): Consolidate isSpeaking into the MediaState type.
|
|
1487
|
-
mediaStateUpdated;
|
|
1488
|
-
left;
|
|
1489
|
-
/**
|
|
1490
|
-
* Live object state. Is changed on internal events.
|
|
1491
|
-
* CAUTION: Do not change directly.
|
|
1492
|
-
*/
|
|
1493
|
-
_state;
|
|
1494
|
-
// TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
|
|
1495
|
-
_raisedHandSignal;
|
|
1496
|
-
_speakingSignal;
|
|
1497
|
-
_joinedSignal;
|
|
1498
|
-
_swarmSynchronizer;
|
|
1499
|
-
_mediaManager;
|
|
1500
1686
|
/** @reactive */
|
|
1501
1687
|
get roomId() {
|
|
1502
1688
|
return this._state.call.roomId;
|
|
@@ -1575,31 +1761,6 @@ var CallManager = class extends Resource5 {
|
|
|
1575
1761
|
turnScreenshareOff() {
|
|
1576
1762
|
return this._mediaManager.turnScreenshareOff();
|
|
1577
1763
|
}
|
|
1578
|
-
// TODO(burdon): Can this be mocked?
|
|
1579
|
-
constructor(_client) {
|
|
1580
|
-
super(), this._client = _client, this.callStateUpdated = new Event4(), this.mediaStateUpdated = new Event4(), this.left = new Event4(), this._state = live({
|
|
1581
|
-
call: {},
|
|
1582
|
-
media: {
|
|
1583
|
-
pulledAudioTracks: {},
|
|
1584
|
-
pulledVideoStreams: {}
|
|
1585
|
-
}
|
|
1586
|
-
}), this._raisedHandSignal = computed(() => this._state.call.raisedHand ?? false), this._speakingSignal = computed(() => this._state.call.speaking ?? false), this._joinedSignal = computed(() => this._state.call.joined ?? false);
|
|
1587
|
-
this._client.config.getOrThrow("runtime.services.edge.url");
|
|
1588
|
-
const networkService = this._client.services.services.NetworkService;
|
|
1589
|
-
invariant3(networkService, "network service not found", {
|
|
1590
|
-
F: __dxlog_file5,
|
|
1591
|
-
L: 159,
|
|
1592
|
-
S: this,
|
|
1593
|
-
A: [
|
|
1594
|
-
"networkService",
|
|
1595
|
-
"'network service not found'"
|
|
1596
|
-
]
|
|
1597
|
-
});
|
|
1598
|
-
this._swarmSynchronizer = new CallSwarmSynchronizer({
|
|
1599
|
-
networkService
|
|
1600
|
-
});
|
|
1601
|
-
this._mediaManager = new MediaManager();
|
|
1602
|
-
}
|
|
1603
1764
|
async _open() {
|
|
1604
1765
|
await this._mediaManager.open();
|
|
1605
1766
|
await this._swarmSynchronizer.open();
|
|
@@ -1640,7 +1801,7 @@ var CallManager = class extends Resource5 {
|
|
|
1640
1801
|
this.roomId && this.left.emit(this.roomId);
|
|
1641
1802
|
}
|
|
1642
1803
|
_onCallStateUpdated(state) {
|
|
1643
|
-
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) => [
|
|
1644
1805
|
user.tracks?.video,
|
|
1645
1806
|
user.tracks?.audio,
|
|
1646
1807
|
user.tracks?.screenshare
|
|
@@ -1673,6 +1834,37 @@ var CallManager = class extends Resource5 {
|
|
|
1673
1834
|
this._state.call = this._swarmSynchronizer._getState();
|
|
1674
1835
|
this._state.media = this._mediaManager._getState();
|
|
1675
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
|
+
}
|
|
1676
1868
|
};
|
|
1677
1869
|
_ts_decorate3([
|
|
1678
1870
|
synchronized3
|
|
@@ -1695,4 +1887,4 @@ export {
|
|
|
1695
1887
|
MediaManager,
|
|
1696
1888
|
CallManager
|
|
1697
1889
|
};
|
|
1698
|
-
//# sourceMappingURL=chunk-
|
|
1890
|
+
//# sourceMappingURL=chunk-ZCEU5K23.mjs.map
|