livekit-client 0.16.5 → 0.17.1

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 (100) 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 -0
  4. package/dist/api/SignalClient.js +24 -3
  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/index.d.ts +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/options.d.ts +7 -2
  12. package/dist/proto/livekit_models.d.ts +33 -0
  13. package/dist/proto/livekit_models.js +213 -3
  14. package/dist/proto/livekit_models.js.map +1 -1
  15. package/dist/proto/livekit_rtc.d.ts +15 -1
  16. package/dist/proto/livekit_rtc.js +128 -2
  17. package/dist/proto/livekit_rtc.js.map +1 -1
  18. package/dist/room/RTCEngine.d.ts +21 -6
  19. package/dist/room/RTCEngine.js +13 -8
  20. package/dist/room/RTCEngine.js.map +1 -1
  21. package/dist/room/Room.d.ts +43 -6
  22. package/dist/room/Room.js +81 -59
  23. package/dist/room/Room.js.map +1 -1
  24. package/dist/room/events.d.ts +14 -2
  25. package/dist/room/events.js +16 -4
  26. package/dist/room/events.js.map +1 -1
  27. package/dist/room/participant/LocalParticipant.d.ts +3 -1
  28. package/dist/room/participant/LocalParticipant.js +17 -1
  29. package/dist/room/participant/LocalParticipant.js.map +1 -1
  30. package/dist/room/participant/Participant.d.ts +30 -4
  31. package/dist/room/participant/Participant.js +2 -2
  32. package/dist/room/participant/Participant.js.map +1 -1
  33. package/dist/room/participant/RemoteParticipant.d.ts +5 -5
  34. package/dist/room/participant/RemoteParticipant.js +3 -3
  35. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  36. package/dist/room/participant/publishUtils.d.ts +6 -0
  37. package/dist/room/participant/publishUtils.js +65 -24
  38. package/dist/room/participant/publishUtils.js.map +1 -1
  39. package/dist/room/participant/publishUtils.test.js +35 -5
  40. package/dist/room/participant/publishUtils.test.js.map +1 -1
  41. package/dist/room/track/LocalAudioTrack.d.ts +2 -0
  42. package/dist/room/track/LocalAudioTrack.js +23 -0
  43. package/dist/room/track/LocalAudioTrack.js.map +1 -1
  44. package/dist/room/track/LocalTrack.d.ts +4 -0
  45. package/dist/room/track/LocalTrack.js +34 -0
  46. package/dist/room/track/LocalTrack.js.map +1 -1
  47. package/dist/room/track/LocalVideoTrack.d.ts +1 -0
  48. package/dist/room/track/LocalVideoTrack.js +13 -0
  49. package/dist/room/track/LocalVideoTrack.js.map +1 -1
  50. package/dist/room/track/RemoteTrack.d.ts +1 -0
  51. package/dist/room/track/RemoteTrack.js +1 -0
  52. package/dist/room/track/RemoteTrack.js.map +1 -1
  53. package/dist/room/track/RemoteVideoTrack.d.ts +4 -2
  54. package/dist/room/track/RemoteVideoTrack.js +23 -8
  55. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  56. package/dist/room/track/Track.d.ts +20 -4
  57. package/dist/room/track/Track.js +20 -1
  58. package/dist/room/track/Track.js.map +1 -1
  59. package/dist/room/track/defaults.js +2 -2
  60. package/dist/room/track/defaults.js.map +1 -1
  61. package/dist/room/track/options.d.ts +65 -15
  62. package/dist/room/track/options.js +38 -0
  63. package/dist/room/track/options.js.map +1 -1
  64. package/dist/room/track/types.d.ts +15 -4
  65. package/dist/room/track/utils.d.ts +10 -0
  66. package/dist/room/track/utils.js +46 -1
  67. package/dist/room/track/utils.js.map +1 -1
  68. package/dist/room/utils.d.ts +1 -0
  69. package/dist/room/utils.js +5 -1
  70. package/dist/room/utils.js.map +1 -1
  71. package/dist/version.d.ts +1 -1
  72. package/dist/version.js +1 -1
  73. package/package.json +2 -1
  74. package/src/api/RequestQueue.ts +7 -7
  75. package/src/api/SignalClient.ts +31 -4
  76. package/src/connect.ts +1 -1
  77. package/src/index.ts +1 -1
  78. package/src/options.ts +12 -3
  79. package/src/proto/livekit_models.ts +249 -0
  80. package/src/proto/livekit_rtc.ts +155 -0
  81. package/src/room/RTCEngine.ts +43 -11
  82. package/src/room/Room.ts +152 -66
  83. package/src/room/events.ts +16 -2
  84. package/src/room/participant/LocalParticipant.ts +23 -4
  85. package/src/room/participant/Participant.ts +39 -4
  86. package/src/room/participant/RemoteParticipant.ts +10 -8
  87. package/src/room/participant/publishUtils.test.ts +46 -6
  88. package/src/room/participant/publishUtils.ts +72 -27
  89. package/src/room/track/LocalAudioTrack.ts +19 -1
  90. package/src/room/track/LocalTrack.ts +36 -0
  91. package/src/room/track/LocalVideoTrack.ts +9 -1
  92. package/src/room/track/RemoteTrack.ts +2 -0
  93. package/src/room/track/RemoteVideoTrack.ts +22 -9
  94. package/src/room/track/Track.ts +29 -3
  95. package/src/room/track/defaults.ts +2 -2
  96. package/src/room/track/options.ts +55 -3
  97. package/src/room/track/types.ts +16 -4
  98. package/src/room/track/utils.ts +39 -0
  99. package/src/room/utils.ts +4 -0
  100. package/src/version.ts +1 -1
@@ -36,27 +36,65 @@ var AudioPresets;
36
36
  * Sane presets for video resolution/encoding
37
37
  */
38
38
  exports.VideoPresets = {
39
+ h90: new VideoPreset(160, 90, 60000, 15),
40
+ h180: new VideoPreset(320, 180, 120000, 15),
41
+ h216: new VideoPreset(384, 216, 180000, 15),
42
+ h360: new VideoPreset(640, 360, 300000, 20),
43
+ h540: new VideoPreset(960, 540, 600000, 25),
44
+ h720: new VideoPreset(1280, 720, 2000000, 30),
45
+ h1080: new VideoPreset(1920, 1080, 3000000, 30),
46
+ h1440: new VideoPreset(2560, 1440, 5000000, 30),
47
+ h2160: new VideoPreset(3840, 2160, 8000000, 30),
48
+ /** @deprecated */
39
49
  qvga: new VideoPreset(320, 180, 120000, 10),
50
+ /** @deprecated */
40
51
  vga: new VideoPreset(640, 360, 300000, 20),
52
+ /** @deprecated */
41
53
  qhd: new VideoPreset(960, 540, 600000, 25),
54
+ /** @deprecated */
42
55
  hd: new VideoPreset(1280, 720, 2000000, 30),
56
+ /** @deprecated */
43
57
  fhd: new VideoPreset(1920, 1080, 3000000, 30),
44
58
  };
45
59
  /**
46
60
  * Four by three presets
47
61
  */
48
62
  exports.VideoPresets43 = {
63
+ h120: new VideoPreset(160, 120, 80000, 15),
64
+ h180: new VideoPreset(240, 180, 100000, 15),
65
+ h240: new VideoPreset(320, 240, 150000, 15),
66
+ h360: new VideoPreset(480, 360, 225000, 20),
67
+ h480: new VideoPreset(640, 480, 300000, 20),
68
+ h540: new VideoPreset(720, 540, 450000, 25),
69
+ h720: new VideoPreset(960, 720, 1500000, 30),
70
+ h1080: new VideoPreset(1440, 1080, 2500000, 30),
71
+ h1440: new VideoPreset(1920, 1440, 3500000, 30),
72
+ /** @deprecated */
49
73
  qvga: new VideoPreset(240, 180, 90000, 10),
74
+ /** @deprecated */
50
75
  vga: new VideoPreset(480, 360, 225000, 20),
76
+ /** @deprecated */
51
77
  qhd: new VideoPreset(720, 540, 450000, 25),
78
+ /** @deprecated */
52
79
  hd: new VideoPreset(960, 720, 1500000, 30),
80
+ /** @deprecated */
53
81
  fhd: new VideoPreset(1440, 1080, 2800000, 30),
54
82
  };
55
83
  exports.ScreenSharePresets = {
84
+ h360fps3: new VideoPreset(640, 360, 200000, 3),
85
+ h720fps5: new VideoPreset(1280, 720, 400000, 5),
86
+ h720fps15: new VideoPreset(1280, 720, 1000000, 15),
87
+ h1080fps15: new VideoPreset(1920, 1080, 1500000, 15),
88
+ h1080fps30: new VideoPreset(1920, 1080, 3000000, 30),
89
+ /** @deprecated */
56
90
  vga: new VideoPreset(640, 360, 200000, 3),
91
+ /** @deprecated */
57
92
  hd_8: new VideoPreset(1280, 720, 400000, 5),
93
+ /** @deprecated */
58
94
  hd_15: new VideoPreset(1280, 720, 1000000, 15),
95
+ /** @deprecated */
59
96
  fhd_15: new VideoPreset(1920, 1080, 1500000, 15),
97
+ /** @deprecated */
60
98
  fhd_30: new VideoPreset(1920, 1080, 3000000, 30),
61
99
  };
62
100
  //# sourceMappingURL=options.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/room/track/options.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,18 @@
1
- import LocalAudioTrack from './LocalAudioTrack';
2
- import LocalVideoTrack from './LocalVideoTrack';
3
- import RemoteAudioTrack from './RemoteAudioTrack';
4
- import RemoteVideoTrack from './RemoteVideoTrack';
1
+ import type LocalAudioTrack from './LocalAudioTrack';
2
+ import type LocalVideoTrack from './LocalVideoTrack';
3
+ import type RemoteAudioTrack from './RemoteAudioTrack';
4
+ import type RemoteVideoTrack from './RemoteVideoTrack';
5
5
  export declare type RemoteTrack = RemoteAudioTrack | RemoteVideoTrack;
6
6
  export declare type AudioTrack = RemoteAudioTrack | LocalAudioTrack;
7
7
  export declare type VideoTrack = RemoteVideoTrack | LocalVideoTrack;
8
+ export declare type AdaptiveStreamSettings = {
9
+ /**
10
+ * Set a custom pixel density, defaults to 1
11
+ * When streaming videos on a ultra high definition screen this setting
12
+ * let's you account for the devicePixelRatio of those screens.
13
+ * Set it to `screen` to use the actual pixel density of the screen
14
+ * Note: this might significantly increase the bandwidth consumed by people
15
+ * streaming on high definition screens.
16
+ */
17
+ pixelDensity?: number | 'screen';
18
+ };
@@ -1,3 +1,13 @@
1
1
  import { AudioCaptureOptions, CreateLocalTracksOptions, VideoCaptureOptions } from './options';
2
+ import { AudioTrack } from './types';
2
3
  export declare function mergeDefaultOptions(options?: CreateLocalTracksOptions, audioDefaults?: AudioCaptureOptions, videoDefaults?: VideoCaptureOptions): CreateLocalTracksOptions;
3
4
  export declare function constraintsForOptions(options: CreateLocalTracksOptions): MediaStreamConstraints;
5
+ /**
6
+ * This function detects silence on a given [[Track]] instance.
7
+ * Returns true if the track seems to be entirely silent.
8
+ */
9
+ export declare function detectSilence(track: AudioTrack, timeOffset?: number): Promise<boolean>;
10
+ /**
11
+ * @internal
12
+ */
13
+ export declare function getNewAudioContext(): AudioContext | void;
@@ -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,7 @@ 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;
6
7
  export declare const getResizeObserver: () => ResizeObserver;
7
8
  export declare const getIntersectionObserver: () => IntersectionObserver;
8
9
  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.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,10 @@ 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;
38
42
  function roDispatchCallback(entries) {
39
43
  for (const entry of entries) {
40
44
  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,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.5";
1
+ export declare const version = "0.17.1";
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.5';
4
+ exports.version = '0.17.1';
5
5
  exports.protocolVersion = 6;
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livekit-client",
3
- "version": "0.16.5",
3
+ "version": "0.17.1",
4
4
  "description": "JavaScript/TypeScript client SDK for LiveKit",
5
5
  "main": "dist/index.js",
6
6
  "source": "src/index.ts",
@@ -23,6 +23,7 @@
23
23
  "loglevel": "^1.8.0",
24
24
  "protobufjs": "^6.11.2",
25
25
  "ts-debounce": "^3.0.0",
26
+ "typed-emitter": "^2.1.0",
26
27
  "webrtc-adapter": "^8.1.1"
27
28
  },
28
29
  "devDependencies": {
@@ -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
  }
@@ -28,11 +28,30 @@ interface ConnectOpts {
28
28
  autoSubscribe?: boolean;
29
29
  /** internal */
30
30
  reconnect?: boolean;
31
+
32
+ publishOnly?: string;
31
33
  }
32
34
 
33
35
  // public options
34
36
  export interface SignalOptions {
35
37
  autoSubscribe?: boolean;
38
+ publishOnly?: string;
39
+ }
40
+
41
+ const passThroughQueueSignals: Array<keyof SignalRequest> = [
42
+ 'syncState',
43
+ 'trickle',
44
+ 'offer',
45
+ 'answer',
46
+ 'simulate',
47
+ 'leave',
48
+ ];
49
+
50
+ function canPassThroughQueue(req: SignalRequest): boolean {
51
+ const canPass = Object.keys(req)
52
+ .find((key) => passThroughQueueSignals.includes(key as keyof SignalRequest)) !== undefined;
53
+ log.trace('request allowed to bypass queue:', canPass, req);
54
+ return canPass;
36
55
  }
37
56
 
38
57
  /** @internal */
@@ -100,6 +119,7 @@ export class SignalClient {
100
119
  this.isConnected = false;
101
120
  const res = await this.connect(url, token, {
102
121
  autoSubscribe: opts?.autoSubscribe,
122
+ publishOnly: opts?.publishOnly,
103
123
  });
104
124
  return res as JoinResponse;
105
125
  }
@@ -109,8 +129,6 @@ export class SignalClient {
109
129
  await this.connect(url, token, {
110
130
  reconnect: true,
111
131
  });
112
- this.isReconnecting = false;
113
- this.requestQueue.run();
114
132
  }
115
133
 
116
134
  connect(
@@ -300,8 +318,8 @@ export class SignalClient {
300
318
  // capture all requests while reconnecting and put them in a queue.
301
319
  // keep order by queueing up new events as long as the queue is not empty
302
320
  // unless the request originates from the queue, then don't enqueue again
303
-
304
- if ((this.isReconnecting && !req.simulate) || (!this.requestQueue.isEmpty() && !fromQueue)) {
321
+ const canQueue = !fromQueue && !canPassThroughQueue(req);
322
+ if (canQueue && (this.isReconnecting || (!this.requestQueue.isEmpty()))) {
305
323
  this.requestQueue.enqueue(() => this.sendRequest(req, true));
306
324
  return;
307
325
  }
@@ -391,6 +409,11 @@ export class SignalClient {
391
409
  }
392
410
  }
393
411
 
412
+ setReconnected() {
413
+ this.isReconnecting = false;
414
+ this.requestQueue.run();
415
+ }
416
+
394
417
  private handleWSError(ev: Event) {
395
418
  log.error('websocket error', ev);
396
419
  }
@@ -458,5 +481,9 @@ function createConnectionParams(token: string, info: ClientInfo, opts?: ConnectO
458
481
  params.set('browser_version', info.browserVersion);
459
482
  }
460
483
 
484
+ if (opts?.publishOnly !== undefined) {
485
+ params.set('publish', opts.publishOnly);
486
+ }
487
+
461
488
  return `?${params.toString()}`;
462
489
  }
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/index.ts CHANGED
@@ -29,7 +29,6 @@ export {
29
29
  Room,
30
30
  RoomState,
31
31
  DataPacket_Kind,
32
- ConnectionQuality,
33
32
  Participant,
34
33
  RemoteParticipant,
35
34
  LocalParticipant,
@@ -44,4 +43,5 @@ export {
44
43
  ParticipantTrackPermission,
45
44
  TrackPublication,
46
45
  VideoQuality,
46
+ ConnectionQuality,
47
47
  };
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