@bigbinary/neeto-media-recorder 2.7.1 → 2.7.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.
package/core.js CHANGED
@@ -835,6 +835,17 @@ var getMediaRecorderOptions = function getMediaRecorderOptions() {
835
835
  mimeType: mimeType
836
836
  };
837
837
  };
838
+ var addGainNode = function addGainNode(audioStream) {
839
+ var gain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.5;
840
+ var audioContext = new AudioContext();
841
+ var audioStreamSource = audioContext.createMediaStreamSource(audioStream);
842
+ var destinationStream = audioContext.createMediaStreamDestination();
843
+ var gainNode = audioContext.createGain();
844
+ gainNode.gain.value = gain;
845
+ audioStreamSource.connect(gainNode);
846
+ gainNode.connect(destinationStream);
847
+ return destinationStream.stream;
848
+ };
838
849
 
839
850
  var s3AxiosInstance = axios.create({
840
851
  headers: {
@@ -1483,10 +1494,12 @@ var _recordingLimitWarningAudio = /*#__PURE__*/new WeakMap();
1483
1494
  var _stopRecordingDueToLimitReachedAudio = /*#__PURE__*/new WeakMap();
1484
1495
  var _stream = /*#__PURE__*/new WeakMap();
1485
1496
  var _audioStream = /*#__PURE__*/new WeakMap();
1497
+ var _micAudioStream = /*#__PURE__*/new WeakMap();
1486
1498
  var _timeLimit = /*#__PURE__*/new WeakMap();
1487
1499
  var _startRecordingTimeoutID = /*#__PURE__*/new WeakMap();
1488
1500
  var _enableNoiseCancellation = /*#__PURE__*/new WeakMap();
1489
1501
  var _mimeType = /*#__PURE__*/new WeakMap();
1502
+ var _stopAllStreams = /*#__PURE__*/new WeakMap();
1490
1503
  var _checkCompatibility = /*#__PURE__*/new WeakMap();
1491
1504
  var _acquireMediaStream = /*#__PURE__*/new WeakMap();
1492
1505
  var _fireCallbacks = /*#__PURE__*/new WeakMap();
@@ -1569,6 +1582,10 @@ var ScreenRecorder = /*#__PURE__*/function () {
1569
1582
  writable: true,
1570
1583
  value: void 0
1571
1584
  });
1585
+ _classPrivateFieldInitSpec(this, _micAudioStream, {
1586
+ writable: true,
1587
+ value: void 0
1588
+ });
1572
1589
  _classPrivateFieldInitSpec(this, _timeLimit, {
1573
1590
  writable: true,
1574
1591
  value: RECORDING_TIME_LIMIT_FREE_PLAN
@@ -1665,40 +1682,22 @@ var ScreenRecorder = /*#__PURE__*/function () {
1665
1682
  }, _callee);
1666
1683
  })));
1667
1684
  _defineProperty(this, "stopRecording", function () {
1668
- var _classPrivateFieldGet8, _classPrivateFieldGet12, _classPrivateFieldGet13, _classPrivateFieldGet14;
1685
+ var _classPrivateFieldGet4;
1669
1686
  if (_classPrivateFieldGet(_this, _mediaRecorder) === undefined) {
1670
- var _classPrivateFieldGet4, _classPrivateFieldGet5, _classPrivateFieldGet6, _classPrivateFieldGet7;
1671
1687
  /**
1672
1688
  * If the permission is denied and "Stop sharing" overlay is clicked
1673
1689
  */
1674
- (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _mediaStream)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.getTracks().forEach(function (track) {
1675
- return track.stop();
1676
- });
1677
- (_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _stream)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.getTracks().forEach(function (track) {
1678
- return track.stop();
1679
- });
1680
- (_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _audioStream)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : (_classPrivateFieldGet7 = _classPrivateFieldGet6.getAudioTracks()) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.forEach(function (track) {
1681
- return track.stop();
1682
- });
1690
+ _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
1683
1691
  return;
1684
1692
  }
1685
- if (((_classPrivateFieldGet8 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.state) === "inactive") {
1686
- var _classPrivateFieldGet9, _classPrivateFieldGet10, _classPrivateFieldGet11;
1693
+ if (((_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.state) === "inactive") {
1687
1694
  // When recording is stopped from the 'Stop Sharing' overlay
1688
1695
  // before it even starts, i.e during the countdown.
1689
1696
  // Or if the recording is stopped before startRecordingTimeoutID timeout executes
1690
1697
  _this.removeCallback(SCREEN_RECORDER_EVENT.onStop);
1691
1698
  clearTimeout(_classPrivateFieldGet(_this, _startRecordingTimeoutID));
1692
1699
  clearInterval(_classPrivateFieldGet(_this, _countdownTimerId));
1693
- _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1694
- return track.stop();
1695
- });
1696
- (_classPrivateFieldGet9 = _classPrivateFieldGet(_this, _stream)) === null || _classPrivateFieldGet9 === void 0 ? void 0 : _classPrivateFieldGet9.getTracks().forEach(function (track) {
1697
- return track.stop();
1698
- });
1699
- (_classPrivateFieldGet10 = _classPrivateFieldGet(_this, _audioStream)) === null || _classPrivateFieldGet10 === void 0 ? void 0 : (_classPrivateFieldGet11 = _classPrivateFieldGet10.getAudioTracks()) === null || _classPrivateFieldGet11 === void 0 ? void 0 : _classPrivateFieldGet11.forEach(function (track) {
1700
- return track.stop();
1701
- });
1700
+ _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
1702
1701
  _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onDiscardDuringCountdown);
1703
1702
  return;
1704
1703
  }
@@ -1706,20 +1705,12 @@ var ScreenRecorder = /*#__PURE__*/function () {
1706
1705
  status: SCREEN_RECORDER_STATUS.stopping
1707
1706
  });
1708
1707
  _classPrivateFieldGet(_this, _mediaRecorder).stop();
1709
- _classPrivateFieldGet(_this, _mediaStream) && _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1710
- return track.stop();
1711
- });
1712
- (_classPrivateFieldGet12 = _classPrivateFieldGet(_this, _stream)) === null || _classPrivateFieldGet12 === void 0 ? void 0 : _classPrivateFieldGet12.getTracks().forEach(function (track) {
1713
- return track.stop();
1714
- });
1715
- (_classPrivateFieldGet13 = _classPrivateFieldGet(_this, _audioStream)) === null || _classPrivateFieldGet13 === void 0 ? void 0 : (_classPrivateFieldGet14 = _classPrivateFieldGet13.getAudioTracks()) === null || _classPrivateFieldGet14 === void 0 ? void 0 : _classPrivateFieldGet14.forEach(function (track) {
1716
- return track.stop();
1717
- });
1708
+ _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
1718
1709
  _classPrivateFieldGet(_this, _stopTimer).call(_this);
1719
1710
  });
1720
1711
  _defineProperty(this, "pauseRecording", function () {
1721
- var _classPrivateFieldGet15;
1722
- if (((_classPrivateFieldGet15 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet15 === void 0 ? void 0 : _classPrivateFieldGet15.state) === "recording") {
1712
+ var _classPrivateFieldGet5;
1713
+ if (((_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.state) === "recording") {
1723
1714
  _classPrivateFieldGet(_this, _store).setState({
1724
1715
  status: SCREEN_RECORDER_STATUS.paused
1725
1716
  });
@@ -1728,8 +1719,8 @@ var ScreenRecorder = /*#__PURE__*/function () {
1728
1719
  _classPrivateFieldGet(_this, _stopTimer).call(_this);
1729
1720
  });
1730
1721
  _defineProperty(this, "resumeRecording", function () {
1731
- var _classPrivateFieldGet16;
1732
- if (((_classPrivateFieldGet16 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet16 === void 0 ? void 0 : _classPrivateFieldGet16.state) === "paused") {
1722
+ var _classPrivateFieldGet6;
1723
+ if (((_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.state) === "paused") {
1733
1724
  _classPrivateFieldGet(_this, _store).setState({
1734
1725
  status: SCREEN_RECORDER_STATUS.recording
1735
1726
  });
@@ -1738,19 +1729,14 @@ var ScreenRecorder = /*#__PURE__*/function () {
1738
1729
  _classPrivateFieldGet(_this, _startTimer).call(_this);
1739
1730
  });
1740
1731
  _defineProperty(this, "discardRecording", function () {
1741
- var _classPrivateFieldGet17, _classPrivateFieldGet18;
1742
- if (((_classPrivateFieldGet17 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet17 === void 0 ? void 0 : _classPrivateFieldGet17.state) === "inactive") return;
1732
+ var _classPrivateFieldGet7;
1733
+ if (((_classPrivateFieldGet7 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.state) === "inactive") return;
1743
1734
  _classPrivateFieldGet(_this, _store).setState({
1744
1735
  status: SCREEN_RECORDER_STATUS.stopping
1745
1736
  });
1746
1737
  _this.removeAllCallbacksByEvent(SCREEN_RECORDER_EVENT.onStop);
1747
1738
  _classPrivateFieldGet(_this, _mediaRecorder).stop();
1748
- _classPrivateFieldGet(_this, _mediaStream) && _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1749
- return track.stop();
1750
- });
1751
- (_classPrivateFieldGet18 = _classPrivateFieldGet(_this, _stream)) === null || _classPrivateFieldGet18 === void 0 ? void 0 : _classPrivateFieldGet18.getTracks().forEach(function (track) {
1752
- return track.stop();
1753
- });
1739
+ _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
1754
1740
  clearInterval(_classPrivateFieldGet(_this, _timerId));
1755
1741
  _classPrivateFieldGet(_this, _store).setState(pick(["elapsedTime"], initialState));
1756
1742
  _classPrivateFieldSet(_this, _mediaChunks, []);
@@ -1777,18 +1763,27 @@ var ScreenRecorder = /*#__PURE__*/function () {
1777
1763
  _classPrivateFieldGet(_this, _checkCompatibility).call(_this);
1778
1764
  });
1779
1765
  _defineProperty(this, "revokePermissions", function () {
1780
- var _classPrivateFieldGet19, _classPrivateFieldGet20, _classPrivateFieldGet21;
1781
1766
  if (!_classPrivateFieldGet(_this, _mediaRecorder)) return;
1782
1767
  _classPrivateFieldGet(_this, _mediaRecorder).onstop = null;
1783
- _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1784
- return track.stop();
1785
- });
1786
- (_classPrivateFieldGet19 = _classPrivateFieldGet(_this, _stream)) === null || _classPrivateFieldGet19 === void 0 ? void 0 : _classPrivateFieldGet19.getTracks().forEach(function (track) {
1787
- return track.stop();
1788
- });
1789
- (_classPrivateFieldGet20 = _classPrivateFieldGet(_this, _audioStream)) === null || _classPrivateFieldGet20 === void 0 ? void 0 : (_classPrivateFieldGet21 = _classPrivateFieldGet20.getAudioTracks()) === null || _classPrivateFieldGet21 === void 0 ? void 0 : _classPrivateFieldGet21.forEach(function (track) {
1790
- return track.stop();
1791
- });
1768
+ _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
1769
+ });
1770
+ _classPrivateFieldInitSpec(this, _stopAllStreams, {
1771
+ writable: true,
1772
+ value: function value() {
1773
+ var _classPrivateFieldGet8, _classPrivateFieldGet9, _classPrivateFieldGet10, _classPrivateFieldGet11, _classPrivateFieldGet12, _classPrivateFieldGet13;
1774
+ _classPrivateFieldGet(_this, _mediaStream) && ((_classPrivateFieldGet8 = _classPrivateFieldGet(_this, _mediaStream)) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.getTracks().forEach(function (track) {
1775
+ return track.stop();
1776
+ }));
1777
+ (_classPrivateFieldGet9 = _classPrivateFieldGet(_this, _stream)) === null || _classPrivateFieldGet9 === void 0 ? void 0 : _classPrivateFieldGet9.getTracks().forEach(function (track) {
1778
+ return track.stop();
1779
+ });
1780
+ (_classPrivateFieldGet10 = _classPrivateFieldGet(_this, _audioStream)) === null || _classPrivateFieldGet10 === void 0 ? void 0 : (_classPrivateFieldGet11 = _classPrivateFieldGet10.getAudioTracks()) === null || _classPrivateFieldGet11 === void 0 ? void 0 : _classPrivateFieldGet11.forEach(function (track) {
1781
+ return track.stop();
1782
+ });
1783
+ (_classPrivateFieldGet12 = _classPrivateFieldGet(_this, _micAudioStream)) === null || _classPrivateFieldGet12 === void 0 ? void 0 : (_classPrivateFieldGet13 = _classPrivateFieldGet12.getAudioTracks()) === null || _classPrivateFieldGet13 === void 0 ? void 0 : _classPrivateFieldGet13.forEach(function (track) {
1784
+ return track.stop();
1785
+ });
1786
+ }
1792
1787
  });
1793
1788
  _classPrivateFieldInitSpec(this, _checkCompatibility, {
1794
1789
  writable: true,
@@ -1815,57 +1810,62 @@ var ScreenRecorder = /*#__PURE__*/function () {
1815
1810
  });
1816
1811
  _context2.prev = 1;
1817
1812
  if (!_classPrivateFieldGet(_this, _audio)) {
1818
- _context2.next = 24;
1813
+ _context2.next = 29;
1819
1814
  break;
1820
1815
  }
1821
- _context2.next = 5;
1816
+ _context2.t0 = _classPrivateFieldSet;
1817
+ _context2.t1 = _this;
1818
+ _context2.t2 = _micAudioStream;
1819
+ _context2.next = 8;
1822
1820
  return window.navigator.mediaDevices.getUserMedia({
1823
1821
  audio: _classPrivateFieldGet(_this, _audio) ? _objectSpread({
1824
1822
  echoCancellation: false
1825
1823
  }, _classPrivateFieldGet(_this, _audio)) : false
1826
1824
  });
1827
- case 5:
1828
- audioStream = _context2.sent;
1825
+ case 8:
1826
+ _context2.t3 = _context2.sent;
1827
+ (0, _context2.t0)(_context2.t1, _context2.t2, _context2.t3);
1828
+ audioStream = addGainNode(_classPrivateFieldGet(_this, _micAudioStream), 1.75); // Increase volume by 50%
1829
1829
  _classPrivateFieldSet(_this, _audioStream, audioStream);
1830
1830
  if (!_classPrivateFieldGet(_this, _enableNoiseCancellation)) {
1831
- _context2.next = 24;
1831
+ _context2.next = 29;
1832
1832
  break;
1833
1833
  }
1834
- _context2.prev = 8;
1834
+ _context2.prev = 13;
1835
1835
  workletUrl = IS_EXTENSION ? chrome.runtime.getURL("public/NoiseSuppressorWorklet.js") : "NoiseSuppressorWorklet.js";
1836
1836
  audioContext = new AudioContext();
1837
- _context2.next = 13;
1837
+ _context2.next = 18;
1838
1838
  return audioContext.audioWorklet.addModule(workletUrl);
1839
- case 13:
1839
+ case 18:
1840
1840
  audioStreamSource = audioContext.createMediaStreamSource(audioStream);
1841
1841
  destinationStream = audioContext.createMediaStreamDestination();
1842
1842
  noiseSuppressorNode = new AudioWorkletNode(audioContext, "nn-suppressor-processor");
1843
1843
  audioStreamSource.connect(noiseSuppressorNode);
1844
1844
  noiseSuppressorNode.connect(destinationStream);
1845
1845
  _classPrivateFieldSet(_this, _audioStream, destinationStream.stream);
1846
- _context2.next = 24;
1846
+ _context2.next = 29;
1847
1847
  break;
1848
- case 21:
1849
- _context2.prev = 21;
1850
- _context2.t0 = _context2["catch"](8);
1851
- console.error("Failed to load audio worklet:", _context2.t0);
1852
- case 24:
1848
+ case 26:
1849
+ _context2.prev = 26;
1850
+ _context2.t4 = _context2["catch"](13);
1851
+ console.error("Failed to load audio worklet:", _context2.t4);
1852
+ case 29:
1853
1853
  if (!_classPrivateFieldGet(_this, _videoStream)) {
1854
- _context2.next = 28;
1854
+ _context2.next = 33;
1855
1855
  break;
1856
1856
  }
1857
1857
  stream = _classPrivateFieldGet(_this, _videoStream);
1858
- _context2.next = 31;
1858
+ _context2.next = 36;
1859
1859
  break;
1860
- case 28:
1861
- _context2.next = 30;
1860
+ case 33:
1861
+ _context2.next = 35;
1862
1862
  return window.navigator.mediaDevices.getDisplayMedia({
1863
1863
  video: _classPrivateFieldGet(_this, _video) || true,
1864
1864
  audio: true
1865
1865
  });
1866
- case 30:
1866
+ case 35:
1867
1867
  stream = _context2.sent;
1868
- case 31:
1868
+ case 36:
1869
1869
  // Event triggered when the user clicks on the stop sharing overlay button
1870
1870
  stream.getVideoTracks()[0].addEventListener("ended", function () {
1871
1871
  _this.stopRecording();
@@ -1896,11 +1896,11 @@ var ScreenRecorder = /*#__PURE__*/function () {
1896
1896
  _classPrivateFieldGet(_this, _store).setState({
1897
1897
  status: SCREEN_RECORDER_STATUS.media_acquired
1898
1898
  });
1899
- _context2.next = 43;
1899
+ _context2.next = 48;
1900
1900
  break;
1901
- case 40:
1902
- _context2.prev = 40;
1903
- _context2.t1 = _context2["catch"](1);
1901
+ case 45:
1902
+ _context2.prev = 45;
1903
+ _context2.t5 = _context2["catch"](1);
1904
1904
  if (_classPrivateFieldGet(_this, _audio) && !_classPrivateFieldGet(_this, _audioStream)) {
1905
1905
  _classPrivateFieldGet(_this, _store).setState({
1906
1906
  error: SCREEN_RECORDER_ERROR.MicPermissionDenied,
@@ -1908,15 +1908,15 @@ var ScreenRecorder = /*#__PURE__*/function () {
1908
1908
  });
1909
1909
  } else if (!_classPrivateFieldGet(_this, _mediaStream) || isStreamEnded(_classPrivateFieldGet(_this, _mediaStream))) {
1910
1910
  _classPrivateFieldGet(_this, _store).setState({
1911
- error: SCREEN_RECORDER_ERROR[_context2.t1.name],
1911
+ error: SCREEN_RECORDER_ERROR[_context2.t5.name],
1912
1912
  status: SCREEN_RECORDER_STATUS.idle
1913
1913
  });
1914
1914
  }
1915
- case 43:
1915
+ case 48:
1916
1916
  case "end":
1917
1917
  return _context2.stop();
1918
1918
  }
1919
- }, _callee2, null, [[1, 40], [8, 21]]);
1919
+ }, _callee2, null, [[1, 45], [13, 26]]);
1920
1920
  }));
1921
1921
  function value() {
1922
1922
  return _value.apply(this, arguments);
@@ -1927,9 +1927,9 @@ var ScreenRecorder = /*#__PURE__*/function () {
1927
1927
  _classPrivateFieldInitSpec(this, _fireCallbacks, {
1928
1928
  writable: true,
1929
1929
  value: function value(event) {
1930
- var _classPrivateFieldGet22;
1930
+ var _classPrivateFieldGet14;
1931
1931
  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1932
- (_classPrivateFieldGet22 = _classPrivateFieldGet(_this, _callbacks)[event]) === null || _classPrivateFieldGet22 === void 0 ? void 0 : _classPrivateFieldGet22.forEach(function (callback) {
1932
+ (_classPrivateFieldGet14 = _classPrivateFieldGet(_this, _callbacks)[event]) === null || _classPrivateFieldGet14 === void 0 ? void 0 : _classPrivateFieldGet14.forEach(function (callback) {
1933
1933
  callback.apply(void 0, _toConsumableArray(args));
1934
1934
  });
1935
1935
  }
@@ -2026,13 +2026,12 @@ var ScreenRecorder = /*#__PURE__*/function () {
2026
2026
  _classPrivateFieldGet(_this, _mediaRecorder).onstop = noop;
2027
2027
  }
2028
2028
  if (_classPrivateFieldGet(_this, _mediaStream)) {
2029
- _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
2030
- return track.stop();
2031
- });
2029
+ _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
2032
2030
  _classPrivateFieldSet(_this, _mediaStream, null);
2033
2031
  }
2034
2032
  _classPrivateFieldSet(_this, _stream, null);
2035
2033
  _classPrivateFieldSet(_this, _audioStream, null);
2034
+ _classPrivateFieldSet(_this, _micAudioStream, null);
2036
2035
  _classPrivateFieldSet(_this, _mediaRecorder, null);
2037
2036
  throw error;
2038
2037
  }
@@ -2112,10 +2111,10 @@ var ScreenRecorder = /*#__PURE__*/function () {
2112
2111
  }, {
2113
2112
  key: "displaySurface",
2114
2113
  get: function get() {
2115
- var _classPrivateFieldGet25;
2116
- var _classPrivateFieldGet23 = (_classPrivateFieldGet25 = _classPrivateFieldGet(this, _mediaStream)) === null || _classPrivateFieldGet25 === void 0 ? void 0 : _classPrivateFieldGet25.getVideoTracks(),
2117
- _classPrivateFieldGet24 = _slicedToArray(_classPrivateFieldGet23, 1),
2118
- videoTrack = _classPrivateFieldGet24[0];
2114
+ var _classPrivateFieldGet17;
2115
+ var _classPrivateFieldGet15 = (_classPrivateFieldGet17 = _classPrivateFieldGet(this, _mediaStream)) === null || _classPrivateFieldGet17 === void 0 ? void 0 : _classPrivateFieldGet17.getVideoTracks(),
2116
+ _classPrivateFieldGet16 = _slicedToArray(_classPrivateFieldGet15, 1),
2117
+ videoTrack = _classPrivateFieldGet16[0];
2119
2118
  return videoTrack.getSettings().displaySurface;
2120
2119
  }
2121
2120
  }, {