livekit-client 0.16.6 → 0.17.2
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/api/RequestQueue.js +6 -6
- package/dist/api/RequestQueue.js.map +1 -1
- package/dist/api/SignalClient.d.ts +3 -1
- package/dist/api/SignalClient.js +47 -5
- package/dist/api/SignalClient.js.map +1 -1
- package/dist/connect.js +1 -1
- package/dist/connect.js.map +1 -1
- package/dist/options.d.ts +7 -2
- package/dist/proto/livekit_models.d.ts +33 -0
- package/dist/proto/livekit_models.js +213 -3
- package/dist/proto/livekit_models.js.map +1 -1
- package/dist/proto/livekit_rtc.d.ts +15 -1
- package/dist/proto/livekit_rtc.js +128 -2
- package/dist/proto/livekit_rtc.js.map +1 -1
- package/dist/room/RTCEngine.d.ts +4 -3
- package/dist/room/RTCEngine.js +34 -13
- package/dist/room/RTCEngine.js.map +1 -1
- package/dist/room/Room.js +27 -12
- package/dist/room/Room.js.map +1 -1
- package/dist/room/events.d.ts +6 -1
- package/dist/room/events.js +6 -1
- package/dist/room/events.js.map +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +3 -1
- package/dist/room/participant/LocalParticipant.js +24 -1
- package/dist/room/participant/LocalParticipant.js.map +1 -1
- package/dist/room/participant/RemoteParticipant.d.ts +2 -1
- package/dist/room/participant/RemoteParticipant.js +3 -3
- package/dist/room/participant/RemoteParticipant.js.map +1 -1
- package/dist/room/participant/publishUtils.d.ts +6 -0
- package/dist/room/participant/publishUtils.js +65 -24
- package/dist/room/participant/publishUtils.js.map +1 -1
- package/dist/room/participant/publishUtils.test.js +35 -5
- package/dist/room/participant/publishUtils.test.js.map +1 -1
- package/dist/room/track/LocalAudioTrack.d.ts +2 -0
- package/dist/room/track/LocalAudioTrack.js +23 -0
- package/dist/room/track/LocalAudioTrack.js.map +1 -1
- package/dist/room/track/LocalTrack.d.ts +4 -0
- package/dist/room/track/LocalTrack.js +35 -0
- package/dist/room/track/LocalTrack.js.map +1 -1
- package/dist/room/track/LocalVideoTrack.d.ts +1 -0
- package/dist/room/track/LocalVideoTrack.js +13 -0
- package/dist/room/track/LocalVideoTrack.js.map +1 -1
- package/dist/room/track/RemoteTrack.d.ts +1 -0
- package/dist/room/track/RemoteTrack.js +2 -0
- package/dist/room/track/RemoteTrack.js.map +1 -1
- package/dist/room/track/RemoteVideoTrack.d.ts +4 -2
- package/dist/room/track/RemoteVideoTrack.js +28 -11
- package/dist/room/track/RemoteVideoTrack.js.map +1 -1
- package/dist/room/track/Track.d.ts +5 -1
- package/dist/room/track/Track.js +20 -1
- package/dist/room/track/Track.js.map +1 -1
- package/dist/room/track/create.js +1 -0
- package/dist/room/track/create.js.map +1 -1
- package/dist/room/track/defaults.js +2 -2
- package/dist/room/track/defaults.js.map +1 -1
- package/dist/room/track/options.d.ts +65 -15
- package/dist/room/track/options.js +38 -0
- package/dist/room/track/options.js.map +1 -1
- package/dist/room/track/types.d.ts +11 -0
- package/dist/room/track/utils.d.ts +10 -0
- package/dist/room/track/utils.js +46 -1
- package/dist/room/track/utils.js.map +1 -1
- package/dist/room/utils.d.ts +2 -0
- package/dist/room/utils.js +9 -1
- package/dist/room/utils.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/src/api/RequestQueue.ts +7 -7
- package/src/api/SignalClient.ts +36 -6
- package/src/connect.ts +1 -1
- package/src/options.ts +12 -3
- package/src/proto/livekit_models.ts +249 -0
- package/src/proto/livekit_rtc.ts +155 -0
- package/src/room/RTCEngine.ts +39 -16
- package/src/room/Room.ts +27 -13
- package/src/room/events.ts +6 -1
- package/src/room/participant/LocalParticipant.ts +31 -4
- package/src/room/participant/RemoteParticipant.ts +4 -4
- package/src/room/participant/publishUtils.test.ts +46 -6
- package/src/room/participant/publishUtils.ts +72 -27
- package/src/room/track/LocalAudioTrack.ts +19 -1
- package/src/room/track/LocalTrack.ts +37 -0
- package/src/room/track/LocalVideoTrack.ts +9 -1
- package/src/room/track/RemoteTrack.ts +3 -0
- package/src/room/track/RemoteVideoTrack.ts +25 -10
- package/src/room/track/Track.ts +16 -2
- package/src/room/track/create.ts +1 -0
- package/src/room/track/defaults.ts +2 -2
- package/src/room/track/options.ts +55 -3
- package/src/room/track/types.ts +12 -0
- package/src/room/track/utils.ts +39 -0
- package/src/room/utils.ts +8 -0
- package/src/version.ts +1 -1
package/dist/room/track/utils.js
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.constraintsForOptions = exports.mergeDefaultOptions = void 0;
|
12
|
+
exports.getNewAudioContext = exports.detectSilence = exports.constraintsForOptions = exports.mergeDefaultOptions = void 0;
|
13
|
+
const utils_1 = require("../utils");
|
4
14
|
function mergeDefaultOptions(options, audioDefaults, videoDefaults) {
|
5
15
|
const opts = Object.assign({}, options);
|
6
16
|
if (opts.audio === true)
|
@@ -65,4 +75,39 @@ function constraintsForOptions(options) {
|
|
65
75
|
return constraints;
|
66
76
|
}
|
67
77
|
exports.constraintsForOptions = constraintsForOptions;
|
78
|
+
/**
|
79
|
+
* This function detects silence on a given [[Track]] instance.
|
80
|
+
* Returns true if the track seems to be entirely silent.
|
81
|
+
*/
|
82
|
+
function detectSilence(track, timeOffset = 200) {
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
84
|
+
const ctx = getNewAudioContext();
|
85
|
+
if (ctx) {
|
86
|
+
const analyser = ctx.createAnalyser();
|
87
|
+
analyser.fftSize = 2048;
|
88
|
+
const bufferLength = analyser.frequencyBinCount;
|
89
|
+
const dataArray = new Uint8Array(bufferLength);
|
90
|
+
const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));
|
91
|
+
source.connect(analyser);
|
92
|
+
yield utils_1.sleep(timeOffset);
|
93
|
+
analyser.getByteTimeDomainData(dataArray);
|
94
|
+
const someNoise = dataArray.some((sample) => sample !== 128 && sample !== 0);
|
95
|
+
ctx.close();
|
96
|
+
return !someNoise;
|
97
|
+
}
|
98
|
+
return false;
|
99
|
+
});
|
100
|
+
}
|
101
|
+
exports.detectSilence = detectSilence;
|
102
|
+
/**
|
103
|
+
* @internal
|
104
|
+
*/
|
105
|
+
function getNewAudioContext() {
|
106
|
+
// @ts-ignore
|
107
|
+
const AudioContext = window.AudioContext || window.webkitAudioContext;
|
108
|
+
if (AudioContext) {
|
109
|
+
return new AudioContext();
|
110
|
+
}
|
111
|
+
}
|
112
|
+
exports.getNewAudioContext = getNewAudioContext;
|
68
113
|
//# sourceMappingURL=utils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/room/track/utils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/room/track/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/room/utils.d.ts
CHANGED
@@ -3,6 +3,8 @@ export declare function unpackStreamId(packed: string): string[];
|
|
3
3
|
export declare function sleep(duration: number): Promise<void>;
|
4
4
|
export declare function isFireFox(): boolean;
|
5
5
|
export declare function isSafari(): boolean;
|
6
|
+
export declare function isMobile(): boolean;
|
7
|
+
export declare function isWeb(): boolean;
|
6
8
|
export declare const getResizeObserver: () => ResizeObserver;
|
7
9
|
export declare const getIntersectionObserver: () => IntersectionObserver;
|
8
10
|
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.getClientInfo = exports.getIntersectionObserver = exports.getResizeObserver = exports.isSafari = exports.isFireFox = exports.sleep = exports.unpackStreamId = void 0;
|
12
|
+
exports.getClientInfo = exports.getIntersectionObserver = exports.getResizeObserver = exports.isWeb = exports.isMobile = exports.isSafari = exports.isFireFox = exports.sleep = exports.unpackStreamId = void 0;
|
13
13
|
const livekit_models_1 = require("../proto/livekit_models");
|
14
14
|
const version_1 = require("../version");
|
15
15
|
const separator = '|';
|
@@ -35,6 +35,14 @@ function isSafari() {
|
|
35
35
|
return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
36
36
|
}
|
37
37
|
exports.isSafari = isSafari;
|
38
|
+
function isMobile() {
|
39
|
+
return /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent);
|
40
|
+
}
|
41
|
+
exports.isMobile = isMobile;
|
42
|
+
function isWeb() {
|
43
|
+
return typeof document !== 'undefined';
|
44
|
+
}
|
45
|
+
exports.isWeb = isWeb;
|
38
46
|
function roDispatchCallback(entries) {
|
39
47
|
for (const entry of entries) {
|
40
48
|
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,4DAAqE;AACrE,wCAAsD;AAEtD,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,SAAgB,QAAQ;IACtB,OAAO,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACpE,CAAC;AAFD,4BAEC;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;AAOF,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,2BAAU,CAAC,WAAW,CAAC;QAClC,GAAG,EAAE,+BAAc,CAAC,EAAE;QACtB,QAAQ,EAAE,yBAAe;QACzB,OAAO,EAAP,iBAAO;KACR,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAPD,sCAOC"}
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/room/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4DAAqE;AACrE,wCAAsD;AAEtD,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,SAAgB,QAAQ;IACtB,OAAO,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACpE,CAAC;AAFD,4BAEC;AAED,SAAgB,QAAQ;IACtB,OAAO,uCAAuC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC3E,CAAC;AAFD,4BAEC;AAED,SAAgB,KAAK;IACnB,OAAO,OAAO,QAAQ,KAAK,WAAW,CAAC;AACzC,CAAC;AAFD,sBAEC;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;AAOF,SAAgB,aAAa;IAC3B,MAAM,IAAI,GAAG,2BAAU,CAAC,WAAW,CAAC;QAClC,GAAG,EAAE,+BAAc,CAAC,EAAE;QACtB,QAAQ,EAAE,yBAAe;QACzB,OAAO,EAAP,iBAAO;KACR,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAPD,sCAOC"}
|
package/dist/version.d.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "0.
|
1
|
+
export declare const version = "0.17.2";
|
2
2
|
export declare const protocolVersion = 6;
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
{
|
2
2
|
"name": "livekit-client",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.17.2",
|
4
4
|
"description": "JavaScript/TypeScript client SDK for LiveKit",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"source": "src/index.ts",
|
7
7
|
"types": "dist/index.d.ts",
|
8
8
|
"repository": "git@github.com:livekit/client-sdk-js.git",
|
9
9
|
"author": "David Zhao <david@davidzhao.com>",
|
10
|
-
"license": "
|
10
|
+
"license": "Apache-2.0",
|
11
11
|
"scripts": {
|
12
12
|
"build": "yarn exec tsc",
|
13
13
|
"build-docs": "yarn exec typedoc",
|
package/src/api/RequestQueue.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import
|
1
|
+
import log from '../logger';
|
2
2
|
|
3
3
|
export default class Queue {
|
4
4
|
private queue: Array<() => void>;
|
@@ -11,34 +11,34 @@ export default class Queue {
|
|
11
11
|
}
|
12
12
|
|
13
13
|
enqueue(cb: () => void) {
|
14
|
-
|
14
|
+
log.trace('enqueuing request to fire later');
|
15
15
|
this.queue.push(cb);
|
16
16
|
}
|
17
17
|
|
18
18
|
dequeue() {
|
19
19
|
const evt = this.queue.shift();
|
20
20
|
if (evt) evt();
|
21
|
-
|
21
|
+
log.trace('firing request from queue');
|
22
22
|
}
|
23
23
|
|
24
24
|
async run() {
|
25
25
|
if (this.running) return;
|
26
|
-
|
26
|
+
log.trace('start queue');
|
27
27
|
this.running = true;
|
28
28
|
while (this.running && this.queue.length > 0) {
|
29
29
|
this.dequeue();
|
30
30
|
}
|
31
31
|
this.running = false;
|
32
|
-
|
32
|
+
log.trace('queue finished');
|
33
33
|
}
|
34
34
|
|
35
35
|
pause() {
|
36
|
-
|
36
|
+
log.trace('pausing queue');
|
37
37
|
this.running = false;
|
38
38
|
}
|
39
39
|
|
40
40
|
reset() {
|
41
|
-
|
41
|
+
log.trace('resetting queue');
|
42
42
|
this.running = false;
|
43
43
|
this.queue = [];
|
44
44
|
}
|
package/src/api/SignalClient.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import '
|
1
|
+
import { isWeb, getClientInfo, sleep } from '../room/utils';
|
2
2
|
import log from '../logger';
|
3
3
|
import {
|
4
4
|
ClientInfo,
|
@@ -20,19 +20,41 @@ import {
|
|
20
20
|
UpdateSubscription, UpdateTrackSettings,
|
21
21
|
} from '../proto/livekit_rtc';
|
22
22
|
import { ConnectionError } from '../room/errors';
|
23
|
-
import { getClientInfo, sleep } from '../room/utils';
|
24
23
|
import Queue from './RequestQueue';
|
25
24
|
|
25
|
+
if (isWeb()) {
|
26
|
+
import('webrtc-adapter');
|
27
|
+
}
|
28
|
+
|
26
29
|
// internal options
|
27
30
|
interface ConnectOpts {
|
28
31
|
autoSubscribe?: boolean;
|
29
32
|
/** internal */
|
30
33
|
reconnect?: boolean;
|
34
|
+
|
35
|
+
publishOnly?: string;
|
31
36
|
}
|
32
37
|
|
33
38
|
// public options
|
34
39
|
export interface SignalOptions {
|
35
40
|
autoSubscribe?: boolean;
|
41
|
+
publishOnly?: string;
|
42
|
+
}
|
43
|
+
|
44
|
+
const passThroughQueueSignals: Array<keyof SignalRequest> = [
|
45
|
+
'syncState',
|
46
|
+
'trickle',
|
47
|
+
'offer',
|
48
|
+
'answer',
|
49
|
+
'simulate',
|
50
|
+
'leave',
|
51
|
+
];
|
52
|
+
|
53
|
+
function canPassThroughQueue(req: SignalRequest): boolean {
|
54
|
+
const canPass = Object.keys(req)
|
55
|
+
.find((key) => passThroughQueueSignals.includes(key as keyof SignalRequest)) !== undefined;
|
56
|
+
log.trace('request allowed to bypass queue:', canPass, req);
|
57
|
+
return canPass;
|
36
58
|
}
|
37
59
|
|
38
60
|
/** @internal */
|
@@ -100,6 +122,7 @@ export class SignalClient {
|
|
100
122
|
this.isConnected = false;
|
101
123
|
const res = await this.connect(url, token, {
|
102
124
|
autoSubscribe: opts?.autoSubscribe,
|
125
|
+
publishOnly: opts?.publishOnly,
|
103
126
|
});
|
104
127
|
return res as JoinResponse;
|
105
128
|
}
|
@@ -109,8 +132,6 @@ export class SignalClient {
|
|
109
132
|
await this.connect(url, token, {
|
110
133
|
reconnect: true,
|
111
134
|
});
|
112
|
-
this.isReconnecting = false;
|
113
|
-
this.requestQueue.run();
|
114
135
|
}
|
115
136
|
|
116
137
|
connect(
|
@@ -300,8 +321,8 @@ export class SignalClient {
|
|
300
321
|
// capture all requests while reconnecting and put them in a queue.
|
301
322
|
// keep order by queueing up new events as long as the queue is not empty
|
302
323
|
// unless the request originates from the queue, then don't enqueue again
|
303
|
-
|
304
|
-
if ((this.isReconnecting
|
324
|
+
const canQueue = !fromQueue && !canPassThroughQueue(req);
|
325
|
+
if (canQueue && (this.isReconnecting || (!this.requestQueue.isEmpty()))) {
|
305
326
|
this.requestQueue.enqueue(() => this.sendRequest(req, true));
|
306
327
|
return;
|
307
328
|
}
|
@@ -391,6 +412,11 @@ export class SignalClient {
|
|
391
412
|
}
|
392
413
|
}
|
393
414
|
|
415
|
+
setReconnected() {
|
416
|
+
this.isReconnecting = false;
|
417
|
+
this.requestQueue.run();
|
418
|
+
}
|
419
|
+
|
394
420
|
private handleWSError(ev: Event) {
|
395
421
|
log.error('websocket error', ev);
|
396
422
|
}
|
@@ -458,5 +484,9 @@ function createConnectionParams(token: string, info: ClientInfo, opts?: ConnectO
|
|
458
484
|
params.set('browser_version', info.browserVersion);
|
459
485
|
}
|
460
486
|
|
487
|
+
if (opts?.publishOnly !== undefined) {
|
488
|
+
params.set('publish', opts.publishOnly);
|
489
|
+
}
|
490
|
+
|
461
491
|
return `?${params.toString()}`;
|
462
492
|
}
|
package/src/connect.ts
CHANGED
@@ -32,7 +32,7 @@ export async function connect(
|
|
32
32
|
): Promise<Room> {
|
33
33
|
options ??= {};
|
34
34
|
if (options.adaptiveStream === undefined) {
|
35
|
-
options.adaptiveStream = options.autoManageVideo;
|
35
|
+
options.adaptiveStream = options.autoManageVideo === true ? {} : undefined;
|
36
36
|
}
|
37
37
|
setLogLevel(options.logLevel ?? LogLevel.warn);
|
38
38
|
|
package/src/options.ts
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
import { LogLevel, LogLevelDesc } from './logger';
|
2
2
|
import {
|
3
|
-
AudioCaptureOptions,
|
3
|
+
AudioCaptureOptions,
|
4
|
+
CreateLocalTracksOptions,
|
5
|
+
TrackPublishDefaults,
|
6
|
+
VideoCaptureOptions,
|
4
7
|
} from './room/track/options';
|
8
|
+
import { AdaptiveStreamSettings } from './room/track/types';
|
5
9
|
|
6
10
|
/**
|
7
11
|
* Options for when creating a new room
|
@@ -16,7 +20,7 @@ export interface RoomOptions {
|
|
16
20
|
* When none of the video elements are visible, it'll temporarily pause
|
17
21
|
* the data flow until they are visible again.
|
18
22
|
*/
|
19
|
-
adaptiveStream?: boolean;
|
23
|
+
adaptiveStream?: AdaptiveStreamSettings | boolean;
|
20
24
|
|
21
25
|
/**
|
22
26
|
* enable Dynacast, off by default. With Dynacast dynamically pauses
|
@@ -64,6 +68,11 @@ export interface RoomConnectOptions {
|
|
64
68
|
* use to override any RTCConfiguration options.
|
65
69
|
*/
|
66
70
|
rtcConfig?: RTCConfiguration;
|
71
|
+
|
72
|
+
/**
|
73
|
+
* publish only mode
|
74
|
+
*/
|
75
|
+
publishOnly?: string;
|
67
76
|
}
|
68
77
|
|
69
78
|
/**
|
@@ -77,7 +86,7 @@ export interface ConnectOptions extends CreateLocalTracksOptions {
|
|
77
86
|
/**
|
78
87
|
* see [[RoomOptions.adaptiveStream]]
|
79
88
|
*/
|
80
|
-
adaptiveStream?: boolean;
|
89
|
+
adaptiveStream?: AdaptiveStreamSettings | boolean;
|
81
90
|
|
82
91
|
/**
|
83
92
|
* alias for adaptiveStream
|