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.
Files changed (94) hide show
  1. package/dist/api/RequestQueue.js +6 -6
  2. package/dist/api/RequestQueue.js.map +1 -1
  3. package/dist/api/SignalClient.d.ts +3 -1
  4. package/dist/api/SignalClient.js +47 -5
  5. package/dist/api/SignalClient.js.map +1 -1
  6. package/dist/connect.js +1 -1
  7. package/dist/connect.js.map +1 -1
  8. package/dist/options.d.ts +7 -2
  9. package/dist/proto/livekit_models.d.ts +33 -0
  10. package/dist/proto/livekit_models.js +213 -3
  11. package/dist/proto/livekit_models.js.map +1 -1
  12. package/dist/proto/livekit_rtc.d.ts +15 -1
  13. package/dist/proto/livekit_rtc.js +128 -2
  14. package/dist/proto/livekit_rtc.js.map +1 -1
  15. package/dist/room/RTCEngine.d.ts +4 -3
  16. package/dist/room/RTCEngine.js +34 -13
  17. package/dist/room/RTCEngine.js.map +1 -1
  18. package/dist/room/Room.js +27 -12
  19. package/dist/room/Room.js.map +1 -1
  20. package/dist/room/events.d.ts +6 -1
  21. package/dist/room/events.js +6 -1
  22. package/dist/room/events.js.map +1 -1
  23. package/dist/room/participant/LocalParticipant.d.ts +3 -1
  24. package/dist/room/participant/LocalParticipant.js +24 -1
  25. package/dist/room/participant/LocalParticipant.js.map +1 -1
  26. package/dist/room/participant/RemoteParticipant.d.ts +2 -1
  27. package/dist/room/participant/RemoteParticipant.js +3 -3
  28. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  29. package/dist/room/participant/publishUtils.d.ts +6 -0
  30. package/dist/room/participant/publishUtils.js +65 -24
  31. package/dist/room/participant/publishUtils.js.map +1 -1
  32. package/dist/room/participant/publishUtils.test.js +35 -5
  33. package/dist/room/participant/publishUtils.test.js.map +1 -1
  34. package/dist/room/track/LocalAudioTrack.d.ts +2 -0
  35. package/dist/room/track/LocalAudioTrack.js +23 -0
  36. package/dist/room/track/LocalAudioTrack.js.map +1 -1
  37. package/dist/room/track/LocalTrack.d.ts +4 -0
  38. package/dist/room/track/LocalTrack.js +35 -0
  39. package/dist/room/track/LocalTrack.js.map +1 -1
  40. package/dist/room/track/LocalVideoTrack.d.ts +1 -0
  41. package/dist/room/track/LocalVideoTrack.js +13 -0
  42. package/dist/room/track/LocalVideoTrack.js.map +1 -1
  43. package/dist/room/track/RemoteTrack.d.ts +1 -0
  44. package/dist/room/track/RemoteTrack.js +2 -0
  45. package/dist/room/track/RemoteTrack.js.map +1 -1
  46. package/dist/room/track/RemoteVideoTrack.d.ts +4 -2
  47. package/dist/room/track/RemoteVideoTrack.js +28 -11
  48. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  49. package/dist/room/track/Track.d.ts +5 -1
  50. package/dist/room/track/Track.js +20 -1
  51. package/dist/room/track/Track.js.map +1 -1
  52. package/dist/room/track/create.js +1 -0
  53. package/dist/room/track/create.js.map +1 -1
  54. package/dist/room/track/defaults.js +2 -2
  55. package/dist/room/track/defaults.js.map +1 -1
  56. package/dist/room/track/options.d.ts +65 -15
  57. package/dist/room/track/options.js +38 -0
  58. package/dist/room/track/options.js.map +1 -1
  59. package/dist/room/track/types.d.ts +11 -0
  60. package/dist/room/track/utils.d.ts +10 -0
  61. package/dist/room/track/utils.js +46 -1
  62. package/dist/room/track/utils.js.map +1 -1
  63. package/dist/room/utils.d.ts +2 -0
  64. package/dist/room/utils.js +9 -1
  65. package/dist/room/utils.js.map +1 -1
  66. package/dist/version.d.ts +1 -1
  67. package/dist/version.js +1 -1
  68. package/package.json +2 -2
  69. package/src/api/RequestQueue.ts +7 -7
  70. package/src/api/SignalClient.ts +36 -6
  71. package/src/connect.ts +1 -1
  72. package/src/options.ts +12 -3
  73. package/src/proto/livekit_models.ts +249 -0
  74. package/src/proto/livekit_rtc.ts +155 -0
  75. package/src/room/RTCEngine.ts +39 -16
  76. package/src/room/Room.ts +27 -13
  77. package/src/room/events.ts +6 -1
  78. package/src/room/participant/LocalParticipant.ts +31 -4
  79. package/src/room/participant/RemoteParticipant.ts +4 -4
  80. package/src/room/participant/publishUtils.test.ts +46 -6
  81. package/src/room/participant/publishUtils.ts +72 -27
  82. package/src/room/track/LocalAudioTrack.ts +19 -1
  83. package/src/room/track/LocalTrack.ts +37 -0
  84. package/src/room/track/LocalVideoTrack.ts +9 -1
  85. package/src/room/track/RemoteTrack.ts +3 -0
  86. package/src/room/track/RemoteVideoTrack.ts +25 -10
  87. package/src/room/track/Track.ts +16 -2
  88. package/src/room/track/create.ts +1 -0
  89. package/src/room/track/defaults.ts +2 -2
  90. package/src/room/track/options.ts +55 -3
  91. package/src/room/track/types.ts +12 -0
  92. package/src/room/track/utils.ts +39 -0
  93. package/src/room/utils.ts +8 -0
  94. package/src/version.ts +1 -1
@@ -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":";;;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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/room/track/utils.ts"],"names":[],"mappings":"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"}
@@ -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 {
@@ -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);
@@ -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.16.6";
1
+ export declare const version = "0.17.2";
2
2
  export declare const protocolVersion = 6;
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.protocolVersion = exports.version = void 0;
4
- exports.version = '0.16.6';
4
+ exports.version = '0.17.2';
5
5
  exports.protocolVersion = 6;
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "livekit-client",
3
- "version": "0.16.6",
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": "MIT",
10
+ "license": "Apache-2.0",
11
11
  "scripts": {
12
12
  "build": "yarn exec tsc",
13
13
  "build-docs": "yarn exec typedoc",
@@ -1,4 +1,4 @@
1
- import logger from '../logger';
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
- logger.debug('enqueuing request to fire later');
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
- logger.debug('firing request from queue');
21
+ log.trace('firing request from queue');
22
22
  }
23
23
 
24
24
  async run() {
25
25
  if (this.running) return;
26
- logger.debug('start queue');
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
- logger.debug('queue finished');
32
+ log.trace('queue finished');
33
33
  }
34
34
 
35
35
  pause() {
36
- logger.debug('pausing queue');
36
+ log.trace('pausing queue');
37
37
  this.running = false;
38
38
  }
39
39
 
40
40
  reset() {
41
- logger.debug('resetting queue');
41
+ log.trace('resetting queue');
42
42
  this.running = false;
43
43
  this.queue = [];
44
44
  }
@@ -1,4 +1,4 @@
1
- import 'webrtc-adapter';
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 && !req.simulate) || (!this.requestQueue.isEmpty() && !fromQueue)) {
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, CreateLocalTracksOptions, TrackPublishDefaults, VideoCaptureOptions,
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