twilio-video 2.28.0 → 2.28.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/CHANGELOG.md CHANGED
@@ -2,12 +2,29 @@ The Twilio Programmable Video SDKs use [Semantic Versioning](http://www.semver.o
2
2
 
3
3
  **Version 1.x reached End of Life on September 8th, 2021.** See the changelog entry [here](https://www.twilio.com/changelog/end-of-life-complete-for-unsupported-versions-of-the-programmable-video-sdk). Support for the 1.x version ended on December 4th, 2020.
4
4
 
5
+ 2.28.2 (November 22, 2024)
6
+ ========================
7
+
8
+ Bug Fixes
9
+ ---------
10
+
11
+ - Fixed a bug in Desktop Safari 18 and all iOS browsers on iOS 18 where cloning a disabled `MediaStreamTrack` would incorrectly set the `enabled` property to `true` instead of preserving the original disabled state. This ensures track cloning behavior matches the MediaStreamTrack specification and works consistently across browsers. Bug report: https://bugs.webkit.org/show_bug.cgi?id=281758
12
+
13
+ 2.28.1 (October 3, 2023)
14
+ ========================
15
+
16
+ Bug Fixes
17
+ ---------
18
+
19
+ - Previously, a Chrome iOS 17 Participant's local audio (Krisp noise cancellation enabled) did not recover after foregrounding the browser following the playing of a YouTube video (or some other application which requires microphone permissions). We work around this by permanently disabling the Krisp noise cancellation upon foregrounding the browser. (VIDEO-13006)
20
+
5
21
  2.28.0 (September 14, 2023)
6
22
  ===========================
7
23
 
8
24
  Bug Fixes
9
25
  ---------
10
26
 
27
+ - Fixed a bug where a Chrome iOS 17 Participant's local and remote media (Krisp Noise Cancellation enabled) failed to recover after interacting with a PSTN call in full-screen mode. (VIDEO-13011)
11
28
  - Fixed a bug where a Chrome iOS 17 Participant's audio with Krisp Noise Cancellation did not recover after interacting with a system popup. (VIDEO-13012)
12
29
  - Fixed a bug where a Chrome iOS 17 Participant's audio with Krisp Noise Cancellation did not recover after invoking Siri. (VIDEO-13013)
13
30
 
package/COMMON_ISSUES.md CHANGED
@@ -33,6 +33,12 @@ before opening a new issue. We recommend regularly upgrading to the latest versi
33
33
 
34
34
  ### Chrome mobile
35
35
  <details>
36
+ <summary>iOS 17: Media issues</summary>
37
+ <p>
38
+ Please refer to this [GitHub Issue](https://github.com/twilio/twilio-video.js/issues/2023) for details.
39
+ </p>
40
+ </details>
41
+ <details>
36
42
  <summary>Android 11: Participants are unable to connect to a room due to ICE gathering failures on certain devices</summary>
37
43
  <p>
38
44
 
@@ -93,6 +99,12 @@ transform: scaleX(-1)
93
99
 
94
100
  ### Safari mobile
95
101
  <details>
102
+ <summary>iOS 17: Media issues</summary>
103
+ <p>
104
+ Please refer to this [GitHub Issue](https://github.com/twilio/twilio-video.js/issues/2023) for details.
105
+ </p>
106
+ </details>
107
+ <details>
96
108
  <summary>iOS 15: Echo issues on iOS 15 devices after attaching video tracks</summary>
97
109
  <p>
98
110
 
package/README.md CHANGED
@@ -74,7 +74,7 @@ Releases of twilio-video.js are hosted on a CDN, and you can include these
74
74
  directly in your web app using a &lt;script&gt; tag.
75
75
 
76
76
  ```html
77
- <script src="//sdk.twilio.com/js/video/releases/2.28.0/twilio-video.min.js"></script>
77
+ <script src="//sdk.twilio.com/js/video/releases/2.28.2/twilio-video.min.js"></script>
78
78
  ```
79
79
 
80
80
  Using this method, twilio-video.js will set a browser global:
@@ -1,4 +1,4 @@
1
- /*! twilio-video.js 2.28.0
1
+ /*! twilio-video.js 2.28.2
2
2
 
3
3
  The following license applies to all parts of this software except as
4
4
  documented below.
@@ -3044,6 +3044,8 @@ var __extends = (this && this.__extends) || (function () {
3044
3044
  };
3045
3045
  })();
3046
3046
  var isIOS = require('../../util/browserdetection').isIOS;
3047
+ var detectSilentAudio = require('../../util/detectsilentaudio');
3048
+ var isIOSChrome = require('../../webrtc/util').isIOSChrome;
3047
3049
  var AudioTrack = require('./audiotrack');
3048
3050
  var mixinLocalMediaTrack = require('./localmediatrack');
3049
3051
  var LocalMediaAudioTrack = mixinLocalMediaTrack(AudioTrack);
@@ -3226,6 +3228,28 @@ var LocalAudioTrack = /** @class */ (function (_super) {
3226
3228
  _this._maybeRestartOnDefaultDeviceChange();
3227
3229
  });
3228
3230
  };
3231
+ /**
3232
+ * NOTE(mmalavalli): On iOS 17 Chrome, a LocalAudioTrack with Krisp Noise Cancellation
3233
+ * enabled that is restarted due to foregrounding the browser is silent for as-of-yet
3234
+ * unknown reason. We work around this by discarding the Krisp MediaStreamTrack and using
3235
+ * the source MediaStreamTrack. (VIDEO-13006)
3236
+ * @private
3237
+ */
3238
+ LocalAudioTrack.prototype._setMediaStreamTrack = function (mediaStreamTrack) {
3239
+ var _this = this;
3240
+ var _a = this, log = _a._log, noiseCancellation = _a.noiseCancellation;
3241
+ var promise = _super.prototype._setMediaStreamTrack.call(this, mediaStreamTrack);
3242
+ if (isIOSChrome() && !!noiseCancellation) {
3243
+ log.debug('iOS Chrome detected, checking if the restarted Krisp audio is silent');
3244
+ promise = promise.then(function () { return detectSilentAudio(_this._dummyEl); }).then(function (isSilent) {
3245
+ log.debug("Krisp audio is " + (isSilent ? 'silent, using source audio' : 'not silent'));
3246
+ return isSilent && noiseCancellation.disablePermanently().then(function () {
3247
+ return _super.prototype._setMediaStreamTrack.call(_this, noiseCancellation.sourceTrack);
3248
+ });
3249
+ });
3250
+ }
3251
+ return promise;
3252
+ };
3229
3253
  /**
3230
3254
  * Disable the {@link LocalAudioTrack}. This is equivalent to muting the audio source.
3231
3255
  * @returns {this}
@@ -3345,7 +3369,7 @@ var LocalAudioTrack = /** @class */ (function (_super) {
3345
3369
  */
3346
3370
  module.exports = LocalAudioTrack;
3347
3371
 
3348
- },{"../../util/browserdetection":123,"./audiotrack":14,"./localmediatrack":24}],21:[function(require,module,exports){
3372
+ },{"../../util/browserdetection":123,"../../util/detectsilentaudio":126,"../../webrtc/util":170,"./audiotrack":14,"./localmediatrack":24}],21:[function(require,module,exports){
3349
3373
  'use strict';
3350
3374
  var __extends = (this && this.__extends) || (function () {
3351
3375
  var extendStatics = function (d, b) {
@@ -10934,7 +10958,14 @@ var LocalTrackPublicationSignaling = /** @class */ (function (_super) {
10934
10958
  */
10935
10959
  function LocalTrackPublicationSignaling(trackSender, name, priority) {
10936
10960
  var _this = this;
10937
- trackSender = trackSender.clone();
10961
+ // NOTE(lrivas): Safely clone a media stream track while preserving the original
10962
+ // enabled state. This is needed because Safari 18 incorrectly enables tracks
10963
+ // during cloning. Bug report: https://bugs.webkit.org/show_bug.cgi?id=281758
10964
+ var clonedTrackSender = trackSender.clone();
10965
+ if (trackSender.kind !== 'data') {
10966
+ clonedTrackSender.track.enabled = trackSender.track.enabled;
10967
+ }
10968
+ trackSender = clonedTrackSender;
10938
10969
  var enabled = trackSender.kind === 'data' ? true : trackSender.track.enabled;
10939
10970
  _this = _super.call(this, name, trackSender.kind, enabled, priority) || this;
10940
10971
  _this.setTrackTransceiver(trackSender);
@@ -30151,7 +30182,7 @@ module.exports={
30151
30182
  "name": "twilio-video",
30152
30183
  "title": "Twilio Video",
30153
30184
  "description": "Twilio Video JavaScript Library",
30154
- "version": "2.28.0",
30185
+ "version": "2.28.2",
30155
30186
  "homepage": "https://twilio.com",
30156
30187
  "author": "Mark Andrus Roberts <mroberts@twilio.com>",
30157
30188
  "contributors": [
@@ -30223,6 +30254,7 @@ module.exports={
30223
30254
  "node-http-server": "^8.1.2",
30224
30255
  "npm-run-all": "^4.0.2",
30225
30256
  "nyc": "^15.1.0",
30257
+ "regex-replace": "^2.3.1",
30226
30258
  "requirejs": "^2.3.3",
30227
30259
  "rimraf": "^2.6.1",
30228
30260
  "simple-git": "^1.126.0",
@@ -30248,6 +30280,7 @@ module.exports={
30248
30280
  "lint:js": "eslint ./lib ./test/*.js ./docker/**/*.js ./test/framework/*.js ./test/lib/*.js ./test/integration/** ./test/unit/** ",
30249
30281
  "lint:ts": "eslint ./tsdef/*.ts ./lib/**/*.ts",
30250
30282
  "lint": "npm-run-all lint:js lint:ts",
30283
+ "patch-linkifyit-111": "regex-replace \"readonly linkify: LinkifyIt.LinkifyIt;\" \"readonly linkify: typeof LinkifyIt;\" \"node_modules/@types/markdown-it/lib/index.d.ts\" --filecontents",
30251
30284
  "printVersion": "node --version && npm --version",
30252
30285
  "test:unit": "npm-run-all printVersion build:es5 && nyc --report-dir=./coverage --include=lib/**/* --reporter=html --reporter=lcov --reporter=text mocha -r ts-node/register ./test/unit/*",
30253
30286
  "test:unit:quick": "nyc --report-dir=./coverage --include=lib/**/* --reporter=html --reporter=lcov mocha -r ts-node/register",
@@ -30286,7 +30319,7 @@ module.exports={
30286
30319
  "test:framework:install": "npm install chromedriver && npm install selenium-webdriver && npm install geckodriver && npm install puppeteer",
30287
30320
  "test:framework": "npm-run-all test:framework:install test:framework:no-framework test:framework:react",
30288
30321
  "test": "npm-run-all test:unit test:integration",
30289
- "build:es5": "rimraf ./es5 && mkdir -p es5 && tsc tsdef/twilio-video-tests.ts --noEmit --lib es2018,dom && tsc",
30322
+ "build:es5": "rimraf ./es5 && mkdir -p es5 && npm run patch-linkifyit-111 && tsc tsdef/twilio-video-tests.ts --noEmit --lib es2018,dom && tsc",
30290
30323
  "build:js": "node ./scripts/build.js ./src/twilio-video.js ./LICENSE.md ./dist/twilio-video.js",
30291
30324
  "build:min.js": "uglifyjs ./dist/twilio-video.js -o ./dist/twilio-video.min.js --comments \"/^! twilio-video.js/\" -b beautify=false,ascii_only=true",
30292
30325
  "build": "npm-run-all clean lint docs test:unit test:integration build:es5 build:js build:min.js test:umd",