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.
Files changed (119) hide show
  1. package/.github/workflows/{lint.yaml → test.yaml} +7 -4
  2. package/.gitmodules +3 -0
  3. package/README.md +46 -14
  4. package/dist/api/SignalClient.d.ts +12 -32
  5. package/dist/api/SignalClient.js +59 -8
  6. package/dist/api/SignalClient.js.map +1 -1
  7. package/dist/connect.d.ts +1 -1
  8. package/dist/connect.js +71 -73
  9. package/dist/connect.js.map +1 -1
  10. package/dist/index.d.ts +6 -4
  11. package/dist/index.js +8 -5
  12. package/dist/index.js.map +1 -1
  13. package/dist/logger.d.ts +10 -0
  14. package/dist/logger.js +15 -0
  15. package/dist/logger.js.map +1 -1
  16. package/dist/options.d.ts +83 -19
  17. package/dist/options.js +0 -10
  18. package/dist/options.js.map +1 -1
  19. package/dist/proto/livekit_models.d.ts +45 -1
  20. package/dist/proto/livekit_models.js +333 -4
  21. package/dist/proto/livekit_models.js.map +1 -1
  22. package/dist/proto/livekit_rtc.d.ts +148 -7
  23. package/dist/proto/livekit_rtc.js +1047 -30
  24. package/dist/proto/livekit_rtc.js.map +1 -1
  25. package/dist/room/PCTransport.js +4 -0
  26. package/dist/room/PCTransport.js.map +1 -1
  27. package/dist/room/RTCEngine.d.ts +4 -2
  28. package/dist/room/RTCEngine.js +36 -38
  29. package/dist/room/RTCEngine.js.map +1 -1
  30. package/dist/room/Room.d.ts +23 -17
  31. package/dist/room/Room.js +205 -71
  32. package/dist/room/Room.js.map +1 -1
  33. package/dist/room/events.d.ts +143 -14
  34. package/dist/room/events.js +142 -13
  35. package/dist/room/events.js.map +1 -1
  36. package/dist/room/participant/LocalParticipant.d.ts +53 -13
  37. package/dist/room/participant/LocalParticipant.js +244 -169
  38. package/dist/room/participant/LocalParticipant.js.map +1 -1
  39. package/dist/room/participant/Participant.d.ts +3 -1
  40. package/dist/room/participant/Participant.js +3 -1
  41. package/dist/room/participant/Participant.js.map +1 -1
  42. package/dist/room/participant/ParticipantTrackPermission.d.ts +19 -0
  43. package/dist/room/participant/ParticipantTrackPermission.js +16 -0
  44. package/dist/room/participant/ParticipantTrackPermission.js.map +1 -0
  45. package/dist/room/participant/RemoteParticipant.d.ts +2 -2
  46. package/dist/room/participant/RemoteParticipant.js +10 -15
  47. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  48. package/dist/room/participant/publishUtils.d.ts +11 -0
  49. package/dist/room/participant/publishUtils.js +148 -0
  50. package/dist/room/participant/publishUtils.js.map +1 -0
  51. package/dist/room/participant/publishUtils.test.d.ts +1 -0
  52. package/dist/room/participant/publishUtils.test.js +79 -0
  53. package/dist/room/participant/publishUtils.test.js.map +1 -0
  54. package/dist/room/stats.d.ts +21 -6
  55. package/dist/room/stats.js +22 -1
  56. package/dist/room/stats.js.map +1 -1
  57. package/dist/room/track/LocalAudioTrack.d.ts +8 -3
  58. package/dist/room/track/LocalAudioTrack.js +49 -3
  59. package/dist/room/track/LocalAudioTrack.js.map +1 -1
  60. package/dist/room/track/LocalTrack.d.ts +1 -3
  61. package/dist/room/track/LocalTrack.js +3 -50
  62. package/dist/room/track/LocalTrack.js.map +1 -1
  63. package/dist/room/track/LocalTrackPublication.d.ts +3 -1
  64. package/dist/room/track/LocalTrackPublication.js +15 -5
  65. package/dist/room/track/LocalTrackPublication.js.map +1 -1
  66. package/dist/room/track/LocalVideoTrack.d.ts +14 -5
  67. package/dist/room/track/LocalVideoTrack.js +156 -62
  68. package/dist/room/track/LocalVideoTrack.js.map +1 -1
  69. package/dist/room/track/LocalVideoTrack.test.d.ts +1 -0
  70. package/dist/room/track/LocalVideoTrack.test.js +68 -0
  71. package/dist/room/track/LocalVideoTrack.test.js.map +1 -0
  72. package/dist/room/track/RemoteAudioTrack.d.ts +6 -8
  73. package/dist/room/track/RemoteAudioTrack.js +55 -19
  74. package/dist/room/track/RemoteAudioTrack.js.map +1 -1
  75. package/dist/room/track/RemoteTrack.d.ts +14 -0
  76. package/dist/room/track/RemoteTrack.js +47 -0
  77. package/dist/room/track/RemoteTrack.js.map +1 -0
  78. package/dist/room/track/RemoteTrackPublication.d.ts +10 -4
  79. package/dist/room/track/RemoteTrackPublication.js +41 -15
  80. package/dist/room/track/RemoteTrackPublication.js.map +1 -1
  81. package/dist/room/track/RemoteVideoTrack.d.ts +7 -9
  82. package/dist/room/track/RemoteVideoTrack.js +77 -41
  83. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  84. package/dist/room/track/Track.d.ts +13 -2
  85. package/dist/room/track/Track.js +34 -2
  86. package/dist/room/track/Track.js.map +1 -1
  87. package/dist/room/track/TrackPublication.d.ts +14 -1
  88. package/dist/room/track/TrackPublication.js +24 -7
  89. package/dist/room/track/TrackPublication.js.map +1 -1
  90. package/dist/room/track/create.d.ts +4 -6
  91. package/dist/room/track/create.js +10 -57
  92. package/dist/room/track/create.js.map +1 -1
  93. package/dist/room/track/defaults.d.ts +4 -0
  94. package/dist/room/track/defaults.js +21 -0
  95. package/dist/room/track/defaults.js.map +1 -0
  96. package/dist/room/track/options.d.ts +15 -65
  97. package/dist/room/track/options.js +14 -13
  98. package/dist/room/track/options.js.map +1 -1
  99. package/dist/room/track/utils.d.ts +3 -0
  100. package/dist/room/track/utils.js +68 -0
  101. package/dist/room/track/utils.js.map +1 -0
  102. package/dist/room/track/utils.test.d.ts +1 -0
  103. package/dist/room/track/utils.test.js +85 -0
  104. package/dist/room/track/utils.test.js.map +1 -0
  105. package/dist/room/utils.d.ts +1 -1
  106. package/dist/room/utils.js +5 -6
  107. package/dist/room/utils.js.map +1 -1
  108. package/dist/version.d.ts +1 -1
  109. package/dist/version.js +1 -1
  110. package/example/index.html +193 -178
  111. package/example/sample.ts +467 -327
  112. package/example/styles.css +144 -0
  113. package/example/webpack.config.js +1 -1
  114. package/jest.config.js +6 -0
  115. package/package.json +9 -6
  116. package/tsconfig.eslint.json +8 -1
  117. package/dist/room/defaults.d.ts +0 -5
  118. package/dist/room/defaults.js +0 -32
  119. 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":";;;AAwNA,MAAa,WAAW;IAOtB,YAAY,KAAa,EAAE,MAAc,EAAE,UAAkB,EAAE,YAAoB;QACjF,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;SACtC,CAAC;IACJ,CAAC;CACF;AAvBD,kCAuBC;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,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,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":";;;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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"}
@@ -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 {
@@ -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.sleep = exports.useLegacyAPI = exports.unpackStreamId = void 0;
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);
@@ -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,SAAgB,YAAY;IAC1B,6CAA6C;IAC7C,OAAO,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,OAAO,KAAK,aAAa,CAAC;AACjF,CAAC;AAHD,oCAGC;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,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"}
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.14.3";
1
+ export declare const version = "0.15.3";
2
2
  export declare const protocolVersion = 5;
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.14.3';
4
+ exports.version = '0.15.3';
5
5
  exports.protocolVersion = 5;
6
6
  //# sourceMappingURL=version.js.map
@@ -15,16 +15,7 @@
15
15
  crossorigin="anonymous"
16
16
  />
17
17
 
18
- <style>
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
- <form>
37
- <div class="form-group row">
38
- <label for="url" class="col-md-3 col-form-label"
39
- >LiveKit URL</label
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 col-md-5"
34
+ class="form-control"
44
35
  id="url"
45
36
  value="ws://localhost:7880"
46
37
  />
47
38
  </div>
48
-
49
- <div class="form-group row">
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
- <div class="form-group row">
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
- <div class="form-group row">
96
- <div class="col-md-2">
97
- <button
98
- id="connect-button"
99
- class="btn btn-primary mt-1"
100
- type="button"
101
- onclick="connectWithFormInput()"
102
- >
103
- Connect
104
- </button>
105
- </div>
106
- <div class="col-md-10">
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
- <!-- video devices -->
174
- <div class="form-group row">
175
- <div class="col-md-4">
176
- <select id="video-input" class="custom-select" onchange="handleDeviceSelected(event)">
177
- <option selected>Video Input (default)</option>
178
- </select>
179
- </div>
180
- <div class="col-md-4">
181
- <select id="audio-input" class="custom-select" onchange="handleDeviceSelected(event)">
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
- <div class="form-group row">
193
- <textarea
194
- class="form-control col-md-12"
195
- id="log"
196
- rows="5"
197
- ></textarea>
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
- </form>
200
- </div>
201
- <div class="col-md-4">
202
- <h3>Chat</h3>
203
- <div class="row">
204
- <div class="col-md-12">
205
- <textarea class="form-control" id="chat" rows="15"></textarea>
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
- <div class="row mt-1">
209
- <div class="col-md-10">
210
- <input type="text" class="form-control" id="entry" />
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 class="col-md-1">
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
- class="btn btn-primary"
172
+ id="start-audio-button"
173
+ class="btn btn-secondary mt-1"
174
+ disabled
215
175
  type="button"
216
- onclick="enterText()"
176
+ onclick="appActions.startAudio()"
217
177
  >
218
- Enter
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 class="row" id="remote-area"></div>
226
- <div class="row" id="local-area">
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>