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