livekit-client 0.14.3 → 0.15.3
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/.github/workflows/{lint.yaml → test.yaml} +7 -4
- package/.gitmodules +3 -0
- package/README.md +46 -14
- package/dist/api/SignalClient.d.ts +12 -32
- package/dist/api/SignalClient.js +59 -8
- package/dist/api/SignalClient.js.map +1 -1
- package/dist/connect.d.ts +1 -1
- package/dist/connect.js +71 -73
- package/dist/connect.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +10 -0
- package/dist/logger.js +15 -0
- package/dist/logger.js.map +1 -1
- package/dist/options.d.ts +83 -19
- package/dist/options.js +0 -10
- package/dist/options.js.map +1 -1
- package/dist/proto/livekit_models.d.ts +45 -1
- package/dist/proto/livekit_models.js +333 -4
- package/dist/proto/livekit_models.js.map +1 -1
- package/dist/proto/livekit_rtc.d.ts +148 -7
- package/dist/proto/livekit_rtc.js +1047 -30
- package/dist/proto/livekit_rtc.js.map +1 -1
- package/dist/room/PCTransport.js +4 -0
- package/dist/room/PCTransport.js.map +1 -1
- package/dist/room/RTCEngine.d.ts +4 -2
- package/dist/room/RTCEngine.js +36 -38
- package/dist/room/RTCEngine.js.map +1 -1
- package/dist/room/Room.d.ts +23 -17
- package/dist/room/Room.js +205 -71
- package/dist/room/Room.js.map +1 -1
- package/dist/room/events.d.ts +143 -14
- package/dist/room/events.js +142 -13
- package/dist/room/events.js.map +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +53 -13
- package/dist/room/participant/LocalParticipant.js +244 -169
- package/dist/room/participant/LocalParticipant.js.map +1 -1
- package/dist/room/participant/Participant.d.ts +3 -1
- package/dist/room/participant/Participant.js +3 -1
- package/dist/room/participant/Participant.js.map +1 -1
- package/dist/room/participant/ParticipantTrackPermission.d.ts +19 -0
- package/dist/room/participant/ParticipantTrackPermission.js +16 -0
- package/dist/room/participant/ParticipantTrackPermission.js.map +1 -0
- package/dist/room/participant/RemoteParticipant.d.ts +2 -2
- package/dist/room/participant/RemoteParticipant.js +10 -15
- package/dist/room/participant/RemoteParticipant.js.map +1 -1
- package/dist/room/participant/publishUtils.d.ts +11 -0
- package/dist/room/participant/publishUtils.js +148 -0
- package/dist/room/participant/publishUtils.js.map +1 -0
- package/dist/room/participant/publishUtils.test.d.ts +1 -0
- package/dist/room/participant/publishUtils.test.js +79 -0
- package/dist/room/participant/publishUtils.test.js.map +1 -0
- package/dist/room/stats.d.ts +21 -6
- package/dist/room/stats.js +22 -1
- package/dist/room/stats.js.map +1 -1
- package/dist/room/track/LocalAudioTrack.d.ts +8 -3
- package/dist/room/track/LocalAudioTrack.js +49 -3
- package/dist/room/track/LocalAudioTrack.js.map +1 -1
- package/dist/room/track/LocalTrack.d.ts +1 -3
- package/dist/room/track/LocalTrack.js +3 -50
- package/dist/room/track/LocalTrack.js.map +1 -1
- package/dist/room/track/LocalTrackPublication.d.ts +3 -1
- package/dist/room/track/LocalTrackPublication.js +15 -5
- package/dist/room/track/LocalTrackPublication.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.d.ts +14 -5
- package/dist/room/track/LocalVideoTrack.js +156 -62
- package/dist/room/track/LocalVideoTrack.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.test.d.ts +1 -0
- package/dist/room/track/LocalVideoTrack.test.js +68 -0
- package/dist/room/track/LocalVideoTrack.test.js.map +1 -0
- package/dist/room/track/RemoteAudioTrack.d.ts +6 -8
- package/dist/room/track/RemoteAudioTrack.js +55 -19
- package/dist/room/track/RemoteAudioTrack.js.map +1 -1
- package/dist/room/track/RemoteTrack.d.ts +14 -0
- package/dist/room/track/RemoteTrack.js +47 -0
- package/dist/room/track/RemoteTrack.js.map +1 -0
- package/dist/room/track/RemoteTrackPublication.d.ts +10 -4
- package/dist/room/track/RemoteTrackPublication.js +41 -15
- package/dist/room/track/RemoteTrackPublication.js.map +1 -1
- package/dist/room/track/RemoteVideoTrack.d.ts +7 -9
- package/dist/room/track/RemoteVideoTrack.js +77 -41
- package/dist/room/track/RemoteVideoTrack.js.map +1 -1
- package/dist/room/track/Track.d.ts +13 -2
- package/dist/room/track/Track.js +34 -2
- package/dist/room/track/Track.js.map +1 -1
- package/dist/room/track/TrackPublication.d.ts +14 -1
- package/dist/room/track/TrackPublication.js +24 -7
- package/dist/room/track/TrackPublication.js.map +1 -1
- package/dist/room/track/create.d.ts +4 -6
- package/dist/room/track/create.js +10 -57
- package/dist/room/track/create.js.map +1 -1
- package/dist/room/track/defaults.d.ts +4 -0
- package/dist/room/track/defaults.js +21 -0
- package/dist/room/track/defaults.js.map +1 -0
- package/dist/room/track/options.d.ts +15 -65
- package/dist/room/track/options.js +14 -13
- package/dist/room/track/options.js.map +1 -1
- package/dist/room/track/utils.d.ts +3 -0
- package/dist/room/track/utils.js +68 -0
- package/dist/room/track/utils.js.map +1 -0
- package/dist/room/track/utils.test.d.ts +1 -0
- package/dist/room/track/utils.test.js +85 -0
- package/dist/room/track/utils.test.js.map +1 -0
- package/dist/room/utils.d.ts +1 -1
- package/dist/room/utils.js +5 -6
- package/dist/room/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/example/index.html +193 -178
- package/example/sample.ts +467 -327
- package/example/styles.css +144 -0
- package/example/webpack.config.js +1 -1
- package/jest.config.js +6 -0
- package/package.json +9 -6
- package/tsconfig.eslint.json +8 -1
- package/dist/room/defaults.d.ts +0 -5
- package/dist/room/defaults.js +0 -32
- package/dist/room/defaults.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":";;;AA4JA,MAAa,WAAW;IAOtB,YAAY,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,YAAqB;QAClF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG;YACd,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;YACrC,WAAW,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;SACtC,CAAC;IACJ,CAAC;CACF;AAxBD,kCAwBC;AAQD,IAAiB,YAAY,CAU5B;AAVD,WAAiB,YAAY;IACd,sBAAS,GAAgB;QACpC,UAAU,EAAE,KAAM;KACnB,CAAC;IACW,mBAAM,GAAgB;QACjC,UAAU,EAAE,KAAM;KACnB,CAAC;IACW,kBAAK,GAAgB;QAChC,UAAU,EAAE,KAAM;KACnB,CAAC;AACJ,CAAC,EAVgB,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAU5B;AAED;;GAEG;AACU,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,EAAE,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAC7C,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CAChD,CAAC;AAEF;;GAEG;AACU,QAAA,cAAc,GAAG;IAC5B,IAAI,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,KAAM,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,EAAE,CAAC;IAC3C,EAAE,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CAChD,CAAC;AAEW,QAAA,kBAAkB,GAAG;IAChC,GAAG,EAAE,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,MAAO,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,MAAO,EAAE,CAAC,CAAC;IAC5C,KAAK,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,OAAS,EAAE,EAAE,CAAC;IAChD,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;IAClD,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAS,EAAE,EAAE,CAAC;CACnD,CAAC"}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import { AudioCaptureOptions, CreateLocalTracksOptions, VideoCaptureOptions } from './options';
|
2
|
+
export declare function mergeDefaultOptions(options?: CreateLocalTracksOptions, audioDefaults?: AudioCaptureOptions, videoDefaults?: VideoCaptureOptions): CreateLocalTracksOptions;
|
3
|
+
export declare function constraintsForOptions(options: CreateLocalTracksOptions): MediaStreamConstraints;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.constraintsForOptions = exports.mergeDefaultOptions = void 0;
|
4
|
+
function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
|
5
|
+
const opts = Object.assign({}, options);
|
6
|
+
if (opts.audio === true)
|
7
|
+
opts.audio = {};
|
8
|
+
if (opts.video === true)
|
9
|
+
opts.video = {};
|
10
|
+
// use defaults
|
11
|
+
if (opts.audio) {
|
12
|
+
mergeObjectWithoutOverwriting(opts.audio, audioDefaults);
|
13
|
+
}
|
14
|
+
if (opts.video) {
|
15
|
+
mergeObjectWithoutOverwriting(opts.video, videoDefaults);
|
16
|
+
}
|
17
|
+
return opts;
|
18
|
+
}
|
19
|
+
exports.mergeDefaultOptions = mergeDefaultOptions;
|
20
|
+
function mergeObjectWithoutOverwriting(mainObject, objectToMerge) {
|
21
|
+
Object.keys(objectToMerge).forEach((key) => {
|
22
|
+
if (mainObject[key] === undefined)
|
23
|
+
mainObject[key] = objectToMerge[key];
|
24
|
+
});
|
25
|
+
return mainObject;
|
26
|
+
}
|
27
|
+
function constraintsForOptions(options) {
|
28
|
+
const constraints = {};
|
29
|
+
if (options.video) {
|
30
|
+
// default video options
|
31
|
+
if (typeof options.video === 'object') {
|
32
|
+
const videoOptions = {};
|
33
|
+
const target = videoOptions;
|
34
|
+
const source = options.video;
|
35
|
+
Object.keys(source).forEach((key) => {
|
36
|
+
switch (key) {
|
37
|
+
case 'resolution':
|
38
|
+
// flatten VideoResolution fields
|
39
|
+
mergeObjectWithoutOverwriting(target, source.resolution);
|
40
|
+
break;
|
41
|
+
default:
|
42
|
+
target[key] = source[key];
|
43
|
+
}
|
44
|
+
});
|
45
|
+
constraints.video = videoOptions;
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
constraints.video = options.video;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
constraints.video = false;
|
53
|
+
}
|
54
|
+
if (options.audio) {
|
55
|
+
if (typeof options.audio === 'object') {
|
56
|
+
constraints.audio = options.audio;
|
57
|
+
}
|
58
|
+
else {
|
59
|
+
constraints.audio = true;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
else {
|
63
|
+
constraints.audio = false;
|
64
|
+
}
|
65
|
+
return constraints;
|
66
|
+
}
|
67
|
+
exports.constraintsForOptions = constraintsForOptions;
|
68
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/room/track/utils.ts"],"names":[],"mappings":";;;AAKA,SAAgB,mBAAmB,CACjC,OAAkC,EAClC,aAAmC,EACnC,aAAmC;IAEnC,MAAM,IAAI,qBACL,OAAO,CACX,CAAC;IACF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAAE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAEzC,eAAe;IACf,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,6BAA6B,CAAC,IAAI,CAAC,KAAgC,EACjE,aAAwC,CAAC,CAAC;KAC7C;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,6BAA6B,CAAC,IAAI,CAAC,KAAgC,EACjE,aAAwC,CAAC,CAAC;KAC7C;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AArBD,kDAqBC;AAED,SAAS,6BAA6B,CACpC,UAAmC,EACnC,aAAsC;IAEtC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAiC;IACrE,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,wBAAwB;QACxB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;YACrC,MAAM,YAAY,GAA0B,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,YAAuC,CAAC;YACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAgC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClC,QAAQ,GAAG,EAAE;oBACX,KAAK,YAAY;wBACf,iCAAiC;wBACjC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,UAAqC,CAAC,CAAC;wBACpF,MAAM;oBACR;wBACE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;iBAC7B;YACH,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,KAAK,GAAG,YAAY,CAAC;SAClC;aAAM;YACL,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;SACnC;KACF;SAAM;QACL,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;KAC3B;IAED,IAAI,OAAO,CAAC,KAAK,EAAE;QACjB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;YACrC,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;SACnC;aAAM;YACL,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;SAC1B;KACF;SAAM;QACL,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;KAC3B;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AArCD,sDAqCC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const options_1 = require("./options");
|
4
|
+
const utils_1 = require("./utils");
|
5
|
+
describe('mergeDefaultOptions', () => {
|
6
|
+
const audioDefaults = {
|
7
|
+
autoGainControl: true,
|
8
|
+
channelCount: 2,
|
9
|
+
};
|
10
|
+
const videoDefaults = {
|
11
|
+
deviceId: 'video123',
|
12
|
+
resolution: options_1.VideoPresets.fhd.resolution,
|
13
|
+
};
|
14
|
+
it('does not enable undefined options', () => {
|
15
|
+
const opts = utils_1.mergeDefaultOptions(undefined, audioDefaults, videoDefaults);
|
16
|
+
expect(opts.audio).toEqual(undefined);
|
17
|
+
expect(opts.video).toEqual(undefined);
|
18
|
+
});
|
19
|
+
it('does not enable explicitly disabled', () => {
|
20
|
+
const opts = utils_1.mergeDefaultOptions({
|
21
|
+
video: false,
|
22
|
+
});
|
23
|
+
expect(opts.audio).toEqual(undefined);
|
24
|
+
expect(opts.video).toEqual(false);
|
25
|
+
});
|
26
|
+
it('accepts true for options', () => {
|
27
|
+
const opts = utils_1.mergeDefaultOptions({
|
28
|
+
audio: true,
|
29
|
+
}, audioDefaults, videoDefaults);
|
30
|
+
expect(opts.audio).toEqual(audioDefaults);
|
31
|
+
expect(opts.video).toEqual(undefined);
|
32
|
+
});
|
33
|
+
it('enables overriding specific fields', () => {
|
34
|
+
const opts = utils_1.mergeDefaultOptions({
|
35
|
+
audio: { channelCount: 1 },
|
36
|
+
}, audioDefaults, videoDefaults);
|
37
|
+
const audioOpts = opts.audio;
|
38
|
+
expect(audioOpts.channelCount).toEqual(1);
|
39
|
+
expect(audioOpts.autoGainControl).toEqual(true);
|
40
|
+
});
|
41
|
+
it('does not override explicit false', () => {
|
42
|
+
const opts = utils_1.mergeDefaultOptions({
|
43
|
+
audio: { autoGainControl: false },
|
44
|
+
}, audioDefaults, videoDefaults);
|
45
|
+
const audioOpts = opts.audio;
|
46
|
+
expect(audioOpts.autoGainControl).toEqual(false);
|
47
|
+
});
|
48
|
+
});
|
49
|
+
describe('constraintsForOptions', () => {
|
50
|
+
it('correctly enables audio bool', () => {
|
51
|
+
const constraints = utils_1.constraintsForOptions({
|
52
|
+
audio: true,
|
53
|
+
});
|
54
|
+
expect(constraints.audio).toEqual(true);
|
55
|
+
expect(constraints.video).toEqual(false);
|
56
|
+
});
|
57
|
+
it('converts audio options correctly', () => {
|
58
|
+
const constraints = utils_1.constraintsForOptions({
|
59
|
+
audio: {
|
60
|
+
noiseSuppression: true,
|
61
|
+
echoCancellation: false,
|
62
|
+
},
|
63
|
+
});
|
64
|
+
const audioOpts = constraints.audio;
|
65
|
+
expect(Object.keys(audioOpts)).toEqual(['noiseSuppression', 'echoCancellation']);
|
66
|
+
expect(audioOpts.noiseSuppression).toEqual(true);
|
67
|
+
expect(audioOpts.echoCancellation).toEqual(false);
|
68
|
+
});
|
69
|
+
it('converts video options correctly', () => {
|
70
|
+
const constraints = utils_1.constraintsForOptions({
|
71
|
+
video: {
|
72
|
+
resolution: options_1.VideoPresets.hd.resolution,
|
73
|
+
facingMode: 'user',
|
74
|
+
deviceId: 'video123',
|
75
|
+
},
|
76
|
+
});
|
77
|
+
const videoOpts = constraints.video;
|
78
|
+
expect(Object.keys(videoOpts)).toEqual(['width', 'height', 'frameRate', 'aspectRatio', 'facingMode', 'deviceId']);
|
79
|
+
expect(videoOpts.width).toEqual(options_1.VideoPresets.hd.resolution.width);
|
80
|
+
expect(videoOpts.height).toEqual(options_1.VideoPresets.hd.resolution.height);
|
81
|
+
expect(videoOpts.frameRate).toEqual(options_1.VideoPresets.hd.resolution.frameRate);
|
82
|
+
expect(videoOpts.aspectRatio).toEqual(options_1.VideoPresets.hd.resolution.aspectRatio);
|
83
|
+
});
|
84
|
+
});
|
85
|
+
//# sourceMappingURL=utils.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../src/room/track/utils.test.ts"],"names":[],"mappings":"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"}
|
package/dist/room/utils.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
export declare function unpackStreamId(packed: string): string[];
|
2
|
-
export declare function useLegacyAPI(): boolean;
|
3
2
|
export declare function sleep(duration: number): Promise<void>;
|
3
|
+
export declare function isFireFox(): boolean;
|
4
4
|
export declare const getResizeObserver: () => ResizeObserver;
|
5
5
|
export declare const getIntersectionObserver: () => IntersectionObserver;
|
6
6
|
export interface ObservableMediaElement extends HTMLMediaElement {
|
package/dist/room/utils.js
CHANGED
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
});
|
10
10
|
};
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
exports.getIntersectionObserver = exports.getResizeObserver = exports.
|
12
|
+
exports.getIntersectionObserver = exports.getResizeObserver = exports.isFireFox = exports.sleep = exports.unpackStreamId = void 0;
|
13
13
|
const separator = '|';
|
14
14
|
function unpackStreamId(packed) {
|
15
15
|
const parts = packed.split(separator);
|
@@ -19,17 +19,16 @@ function unpackStreamId(packed) {
|
|
19
19
|
return [packed, ''];
|
20
20
|
}
|
21
21
|
exports.unpackStreamId = unpackStreamId;
|
22
|
-
function useLegacyAPI() {
|
23
|
-
// react native is using old stream based API
|
24
|
-
return typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
|
25
|
-
}
|
26
|
-
exports.useLegacyAPI = useLegacyAPI;
|
27
22
|
function sleep(duration) {
|
28
23
|
return __awaiter(this, void 0, void 0, function* () {
|
29
24
|
return new Promise((resolve) => setTimeout(resolve, duration));
|
30
25
|
});
|
31
26
|
}
|
32
27
|
exports.sleep = sleep;
|
28
|
+
function isFireFox() {
|
29
|
+
return navigator.userAgent.indexOf('Firefox') !== -1;
|
30
|
+
}
|
31
|
+
exports.isFireFox = isFireFox;
|
33
32
|
function roDispatchCallback(entries) {
|
34
33
|
for (const entry of entries) {
|
35
34
|
entry.target.handleResize(entry);
|
package/dist/room/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/room/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KACvD;IACD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC;AAND,wCAMC;AAED,
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/room/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KACvD;IACD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC;AAND,wCAMC;AAED,SAAsB,KAAK,CAAC,QAAgB;;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;CAAA;AAFD,sBAEC;AAED,SAAgB,SAAS;IACvB,OAAO,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AAFD,8BAEC;AAED,SAAS,kBAAkB,CAAC,OAA8B;IACxD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC1B,KAAK,CAAC,MAAiC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KAC9D;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAoC;IAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC1B,KAAK,CAAC,MAAiC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;KACzE;AACH,CAAC;AAED,IAAI,cAAc,GAA0B,IAAI,CAAC;AAC1C,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,IAAI,CAAC,cAAc;QAAE,cAAc,GAAG,IAAI,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC7E,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B;AAEF,IAAI,oBAAoB,GAAgC,IAAI,CAAC;AACtD,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,IAAI,CAAC,oBAAoB;QAAE,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC/F,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAHW,QAAA,uBAAuB,2BAGlC"}
|
package/dist/version.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "0.
|
1
|
+
export declare const version = "0.15.3";
|
2
2
|
export declare const protocolVersion = 5;
|
package/dist/version.js
CHANGED
package/example/index.html
CHANGED
@@ -15,16 +15,7 @@
|
|
15
15
|
crossorigin="anonymous"
|
16
16
|
/>
|
17
17
|
|
18
|
-
<
|
19
|
-
.video-container {
|
20
|
-
display: inline-block;
|
21
|
-
border-radius: 5px;
|
22
|
-
}
|
23
|
-
|
24
|
-
.video-container video.speaking {
|
25
|
-
border: 4px solid rgba(94, 166, 190, 0.7);
|
26
|
-
}
|
27
|
-
</style>
|
18
|
+
<link rel="stylesheet" href="styles.css">
|
28
19
|
</head>
|
29
20
|
|
30
21
|
<body>
|
@@ -33,200 +24,224 @@
|
|
33
24
|
<div class="col-md-8">
|
34
25
|
<h2>Livekit Sample App</h2>
|
35
26
|
<br/>
|
36
|
-
<
|
37
|
-
<div
|
38
|
-
<
|
39
|
-
|
40
|
-
|
27
|
+
<div id="connect-area">
|
28
|
+
<div>
|
29
|
+
<b>LiveKit URL</b>
|
30
|
+
</div>
|
31
|
+
<div>
|
41
32
|
<input
|
42
33
|
type="text"
|
43
|
-
class="form-control
|
34
|
+
class="form-control"
|
44
35
|
id="url"
|
45
36
|
value="ws://localhost:7880"
|
46
37
|
/>
|
47
38
|
</div>
|
48
|
-
|
49
|
-
|
50
|
-
<label for="token" class="col-md-3 col-form-label">Token</label>
|
51
|
-
<input type="text" class="form-control col-md-5" id="token" />
|
39
|
+
<div>
|
40
|
+
<b>Token</b>
|
52
41
|
</div>
|
53
|
-
|
54
|
-
|
55
|
-
<div class="col-md-2 offset-md-1">
|
56
|
-
<div class="form-check">
|
57
|
-
<input
|
58
|
-
type="checkbox"
|
59
|
-
class="form-check-input"
|
60
|
-
id="publish-option"
|
61
|
-
checked
|
62
|
-
/>
|
63
|
-
<label for="checkbox" class="form-check-label">
|
64
|
-
Publish
|
65
|
-
</label>
|
66
|
-
</div>
|
67
|
-
</div>
|
68
|
-
<div class="col-md-2">
|
69
|
-
<div class="form-check">
|
70
|
-
<input
|
71
|
-
type="checkbox"
|
72
|
-
class="form-check-input"
|
73
|
-
id="simulcast"
|
74
|
-
checked
|
75
|
-
/>
|
76
|
-
<label for="checkbox" class="form-check-label">
|
77
|
-
Simulcast
|
78
|
-
</label>
|
79
|
-
</div>
|
80
|
-
</div>
|
81
|
-
<div class="col-md-3">
|
82
|
-
<div class="form-check">
|
83
|
-
<input
|
84
|
-
type="checkbox"
|
85
|
-
class="form-check-input"
|
86
|
-
id="force-turn"
|
87
|
-
/>
|
88
|
-
<label for="checkbox" class="form-check-label">
|
89
|
-
Force TURN
|
90
|
-
</label>
|
91
|
-
</div>
|
92
|
-
</div>
|
42
|
+
<div>
|
43
|
+
<input type="text" class="form-control" id="token" />
|
93
44
|
</div>
|
45
|
+
</div>
|
94
46
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
<button
|
108
|
-
id="toggle-audio-button"
|
109
|
-
class="btn btn-secondary mt-1"
|
110
|
-
disabled
|
111
|
-
type="button"
|
112
|
-
onclick="toggleAudio()"
|
113
|
-
>
|
114
|
-
Enable Audio
|
115
|
-
</button>
|
116
|
-
<button
|
117
|
-
id="toggle-video-button"
|
118
|
-
class="btn btn-secondary mt-1"
|
119
|
-
disabled
|
120
|
-
type="button"
|
121
|
-
onclick="toggleVideo()"
|
122
|
-
>
|
123
|
-
Enable Video
|
124
|
-
</button>
|
125
|
-
<button
|
126
|
-
id="flip-video-button"
|
127
|
-
class="btn btn-secondary mt-1"
|
128
|
-
disabled
|
129
|
-
type="button"
|
130
|
-
onclick="flipVideo()"
|
131
|
-
>
|
132
|
-
Back Camera
|
133
|
-
</button>
|
134
|
-
<button
|
135
|
-
id="share-screen-button"
|
136
|
-
class="btn btn-secondary mt-1"
|
137
|
-
disabled
|
138
|
-
type="button"
|
139
|
-
onclick="shareScreen()"
|
140
|
-
>
|
141
|
-
Share Screen
|
142
|
-
</button>
|
143
|
-
<button
|
144
|
-
id="disconnect-ws-button"
|
145
|
-
class="btn btn-warning mt-1"
|
146
|
-
disabled
|
147
|
-
type="button"
|
148
|
-
onclick="disconnectSignal()"
|
149
|
-
>
|
150
|
-
WS Reconnect
|
151
|
-
</button>
|
152
|
-
<button
|
153
|
-
id="disconnect-room-button"
|
154
|
-
class="btn btn-danger mt-1"
|
155
|
-
disabled
|
156
|
-
type="button"
|
157
|
-
onclick="disconnectRoom()"
|
158
|
-
>
|
159
|
-
Disconnect
|
160
|
-
</button>
|
161
|
-
<button
|
162
|
-
id="start-audio-button"
|
163
|
-
class="btn btn-secondary mt-1"
|
164
|
-
disabled
|
165
|
-
type="button"
|
166
|
-
onclick="startAudio()"
|
167
|
-
>
|
168
|
-
Enable Audio
|
169
|
-
</button>
|
170
|
-
</div>
|
47
|
+
<!-- connect options -->
|
48
|
+
<div id="options-area">
|
49
|
+
<div>
|
50
|
+
<input
|
51
|
+
type="checkbox"
|
52
|
+
class="form-check-input"
|
53
|
+
id="publish-option"
|
54
|
+
checked
|
55
|
+
/>
|
56
|
+
<label for="publish-option" class="form-check-label">
|
57
|
+
Publish
|
58
|
+
</label>
|
171
59
|
</div>
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
<option selected>Audio Input (default)</option>
|
183
|
-
</select>
|
184
|
-
</div>
|
185
|
-
<div class="col-md-4">
|
186
|
-
<select id="audio-output" class="custom-select" onchange="handleDeviceSelected(event)">
|
187
|
-
<option selected>Audio Output (default)</option>
|
188
|
-
</select>
|
189
|
-
</div>
|
60
|
+
<div>
|
61
|
+
<input
|
62
|
+
type="checkbox"
|
63
|
+
class="form-check-input"
|
64
|
+
id="simulcast"
|
65
|
+
checked
|
66
|
+
/>
|
67
|
+
<label for="simulcast" class="form-check-label">
|
68
|
+
Simulcast
|
69
|
+
</label>
|
190
70
|
</div>
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
class="form-
|
195
|
-
id="
|
196
|
-
|
197
|
-
|
71
|
+
<div>
|
72
|
+
<input
|
73
|
+
type="checkbox"
|
74
|
+
class="form-check-input"
|
75
|
+
id="dynacast"
|
76
|
+
checked
|
77
|
+
/>
|
78
|
+
<label for="dynacast" class="form-check-label">
|
79
|
+
Dynacast
|
80
|
+
</label>
|
198
81
|
</div>
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
82
|
+
<div>
|
83
|
+
<input
|
84
|
+
type="checkbox"
|
85
|
+
class="form-check-input"
|
86
|
+
id="adaptive-stream"
|
87
|
+
checked
|
88
|
+
/>
|
89
|
+
<label for="adaptive-stream" class="form-check-label">
|
90
|
+
AdaptiveStream
|
91
|
+
</label>
|
92
|
+
</div>
|
93
|
+
<div>
|
94
|
+
<input
|
95
|
+
type="checkbox"
|
96
|
+
class="form-check-input"
|
97
|
+
id="force-turn"
|
98
|
+
/>
|
99
|
+
<label for="force-turn" class="form-check-label">
|
100
|
+
Force TURN
|
101
|
+
</label>
|
206
102
|
</div>
|
207
103
|
</div>
|
208
|
-
|
209
|
-
|
210
|
-
|
104
|
+
|
105
|
+
<!-- actions -->
|
106
|
+
<div id="actions-area">
|
107
|
+
<div>
|
108
|
+
<button
|
109
|
+
id="connect-button"
|
110
|
+
class="btn btn-primary mt-1"
|
111
|
+
type="button"
|
112
|
+
onclick="appActions.connectWithFormInput()"
|
113
|
+
>
|
114
|
+
Connect
|
115
|
+
</button>
|
211
116
|
</div>
|
212
|
-
<div
|
117
|
+
<div>
|
118
|
+
<button
|
119
|
+
id="toggle-audio-button"
|
120
|
+
class="btn btn-secondary mt-1"
|
121
|
+
disabled
|
122
|
+
type="button"
|
123
|
+
onclick="appActions.toggleAudio()"
|
124
|
+
>
|
125
|
+
Enable Mic
|
126
|
+
</button>
|
127
|
+
<button
|
128
|
+
id="toggle-video-button"
|
129
|
+
class="btn btn-secondary mt-1"
|
130
|
+
disabled
|
131
|
+
type="button"
|
132
|
+
onclick="appActions.toggleVideo()"
|
133
|
+
>
|
134
|
+
Enable Camera
|
135
|
+
</button>
|
136
|
+
<button
|
137
|
+
id="flip-video-button"
|
138
|
+
class="btn btn-secondary mt-1"
|
139
|
+
disabled
|
140
|
+
type="button"
|
141
|
+
onclick="appActions.flipVideo()"
|
142
|
+
>
|
143
|
+
Flip Camera
|
144
|
+
</button>
|
145
|
+
<button
|
146
|
+
id="share-screen-button"
|
147
|
+
class="btn btn-secondary mt-1"
|
148
|
+
disabled
|
149
|
+
type="button"
|
150
|
+
onclick="appActions.shareScreen()"
|
151
|
+
>
|
152
|
+
Share Screen
|
153
|
+
</button>
|
154
|
+
<select id="simulate-scenario" class="custom-select" style="width: auto;" onchange="appActions.handleScenario(event)">
|
155
|
+
<option value="" selected>Simulate</option>
|
156
|
+
<option value="signal-reconnect">Signal reconnect</option>
|
157
|
+
<option value="speaker">Speaker update</option>
|
158
|
+
<option value="node-failure">Node failure</option>
|
159
|
+
<option value="server-leave">Server booted</option>
|
160
|
+
<option value="migration">Migration</option>
|
161
|
+
</select>
|
162
|
+
<button
|
163
|
+
id="disconnect-room-button"
|
164
|
+
class="btn btn-danger mt-1"
|
165
|
+
disabled
|
166
|
+
type="button"
|
167
|
+
onclick="appActions.disconnectRoom()"
|
168
|
+
>
|
169
|
+
Disconnect
|
170
|
+
</button>
|
213
171
|
<button
|
214
|
-
|
172
|
+
id="start-audio-button"
|
173
|
+
class="btn btn-secondary mt-1"
|
174
|
+
disabled
|
215
175
|
type="button"
|
216
|
-
onclick="
|
176
|
+
onclick="appActions.startAudio()"
|
217
177
|
>
|
218
|
-
|
178
|
+
Start Audio
|
219
179
|
</button>
|
220
180
|
</div>
|
221
181
|
</div>
|
182
|
+
|
183
|
+
<div id="inputs-area">
|
184
|
+
<div>
|
185
|
+
<select id="video-input" class="custom-select" onchange="appActions.handleDeviceSelected(event)">
|
186
|
+
<option selected>Video Input (default)</option>
|
187
|
+
</select>
|
188
|
+
</div>
|
189
|
+
<div>
|
190
|
+
<select id="audio-input" class="custom-select" onchange="appActions.handleDeviceSelected(event)">
|
191
|
+
<option selected>Audio Input (default)</option>
|
192
|
+
</select>
|
193
|
+
</div>
|
194
|
+
<div>
|
195
|
+
<select id="audio-output" class="custom-select" onchange="appActions.handleDeviceSelected(event)">
|
196
|
+
<option selected>Audio Output (default)</option>
|
197
|
+
</select>
|
198
|
+
</div>
|
199
|
+
</div>
|
222
200
|
</div>
|
201
|
+
<div class="col-md-4">
|
202
|
+
<h3>Chat</h3>
|
203
|
+
<div id="chat-area">
|
204
|
+
<textarea class="form-control" id="chat" rows="9"></textarea>
|
205
|
+
<div id="chat-input-area">
|
206
|
+
<div>
|
207
|
+
<input type="text" class="form-control" id="entry"
|
208
|
+
placeholder="Type your message here" />
|
209
|
+
</div>
|
210
|
+
<div>
|
211
|
+
<button
|
212
|
+
id="send-button"
|
213
|
+
class="btn btn-primary"
|
214
|
+
type="button"
|
215
|
+
onclick="appActions.enterText()"
|
216
|
+
disabled
|
217
|
+
>
|
218
|
+
Send
|
219
|
+
</button>
|
220
|
+
</div>
|
221
|
+
</div>
|
222
|
+
</div>
|
223
|
+
</div>
|
224
|
+
</div>
|
225
|
+
|
226
|
+
<div id="screenshare-area">
|
227
|
+
<div>
|
228
|
+
<span id="screenshare-info">
|
229
|
+
</span>
|
230
|
+
<span id="screenshare-resolution">
|
231
|
+
</span>
|
232
|
+
</div>
|
233
|
+
<video id="screenshare-video" autoplay playsinline></video>
|
234
|
+
</div>
|
235
|
+
|
236
|
+
<div id="participants-area">
|
223
237
|
</div>
|
224
238
|
|
225
|
-
<div
|
226
|
-
|
227
|
-
<div class="col-md-6 video-container" id="local-video"></div>
|
239
|
+
<div id="log-area">
|
240
|
+
<textarea id="log"></textarea>
|
228
241
|
</div>
|
229
242
|
</div>
|
230
243
|
<script src="bundle.js"></script>
|
244
|
+
<!-- for icons -->
|
245
|
+
<script src="https://kit.fontawesome.com/7c1c4c7e9c.js" crossorigin="anonymous"></script>
|
231
246
|
</body>
|
232
247
|
</html>
|