pixel-react 1.15.11 → 1.15.12

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 (249) hide show
  1. package/README.md +75 -75
  2. package/lib/ThirdPartyPackages/JanusGateway.js +5 -2
  3. package/lib/ThirdPartyPackages/JanusGateway.js.map +1 -1
  4. package/lib/_virtual/index10.js +2 -2
  5. package/lib/_virtual/index11.js +2 -2
  6. package/lib/_virtual/index12.js +2 -2
  7. package/lib/_virtual/index9.js +2 -2
  8. package/lib/assets/icons/spinner.svg.js +1 -1
  9. package/lib/assets/icons/spinner.svg.js.map +1 -1
  10. package/lib/components/Editor/VariableDropdown.js +2 -2
  11. package/lib/index.cjs +7209 -4574
  12. package/lib/index.cjs.map +1 -1
  13. package/lib/index.js +1 -1
  14. package/lib/node_modules/@date-fns/tz/date/index.js +19 -1
  15. package/lib/node_modules/@date-fns/tz/date/index.js.map +1 -1
  16. package/lib/node_modules/@date-fns/tz/date/mini.js +6 -34
  17. package/lib/node_modules/@date-fns/tz/date/mini.js.map +1 -1
  18. package/lib/node_modules/@date-fns/tz/tzOffset/index.js +5 -6
  19. package/lib/node_modules/@date-fns/tz/tzOffset/index.js.map +1 -1
  20. package/lib/node_modules/janus-gateway/npm/dist/janus.es.js +3241 -0
  21. package/lib/node_modules/janus-gateway/npm/dist/janus.es.js.map +1 -0
  22. package/lib/node_modules/js-beautify/js/src/css/index.js +1 -1
  23. package/lib/node_modules/js-beautify/js/src/css/options.js +1 -1
  24. package/lib/node_modules/js-beautify/js/src/html/beautifier.js +1 -1
  25. package/lib/node_modules/js-beautify/js/src/html/index.js +1 -1
  26. package/lib/node_modules/js-beautify/js/src/html/options.js +1 -1
  27. package/lib/node_modules/js-beautify/js/src/html/tokenizer.js +1 -1
  28. package/lib/node_modules/js-beautify/js/src/javascript/beautifier.js +1 -1
  29. package/lib/node_modules/js-beautify/js/src/javascript/index.js +1 -1
  30. package/lib/node_modules/js-beautify/js/src/javascript/options.js +1 -1
  31. package/lib/node_modules/js-beautify/js/src/javascript/tokenizer.js +1 -1
  32. package/lib/node_modules/libphonenumber-js/es6/AsYouType.js +82 -115
  33. package/lib/node_modules/libphonenumber-js/es6/AsYouType.js.map +1 -1
  34. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js +58 -68
  35. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js.map +1 -1
  36. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js +23 -36
  37. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js.map +1 -1
  38. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js +9 -13
  39. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js.map +1 -1
  40. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js +187 -226
  41. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js.map +1 -1
  42. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js +27 -21
  43. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js.map +1 -1
  44. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeParser.js +117 -150
  45. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeParser.js.map +1 -1
  46. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeState.js +38 -57
  47. package/lib/node_modules/libphonenumber-js/es6/AsYouTypeState.js.map +1 -1
  48. package/lib/node_modules/libphonenumber-js/es6/ParseError.js +109 -70
  49. package/lib/node_modules/libphonenumber-js/es6/ParseError.js.map +1 -1
  50. package/lib/node_modules/libphonenumber-js/es6/PhoneNumber.js +57 -72
  51. package/lib/node_modules/libphonenumber-js/es6/PhoneNumber.js.map +1 -1
  52. package/lib/node_modules/libphonenumber-js/es6/constants.js +9 -15
  53. package/lib/node_modules/libphonenumber-js/es6/constants.js.map +1 -1
  54. package/lib/node_modules/libphonenumber-js/es6/format.js +93 -67
  55. package/lib/node_modules/libphonenumber-js/es6/format.js.map +1 -1
  56. package/lib/node_modules/libphonenumber-js/es6/formatIncompletePhoneNumber.js +1 -0
  57. package/lib/node_modules/libphonenumber-js/es6/formatIncompletePhoneNumber.js.map +1 -1
  58. package/lib/node_modules/libphonenumber-js/es6/getCountries.js.map +1 -1
  59. package/lib/node_modules/libphonenumber-js/es6/helpers/RFC3966.js +1 -0
  60. package/lib/node_modules/libphonenumber-js/es6/helpers/RFC3966.js.map +1 -1
  61. package/lib/node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js +1 -1
  62. package/lib/node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js.map +1 -1
  63. package/lib/node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js +10 -49
  64. package/lib/node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js.map +1 -1
  65. package/lib/node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js +32 -20
  66. package/lib/node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js.map +1 -1
  67. package/lib/node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js +4 -5
  68. package/lib/node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js.map +1 -1
  69. package/lib/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js +18 -25
  70. package/lib/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js.map +1 -1
  71. package/lib/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js +11 -12
  72. package/lib/node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map +1 -1
  73. package/lib/node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js +11 -13
  74. package/lib/node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map +1 -1
  75. package/lib/node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js +11 -21
  76. package/lib/node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js.map +1 -1
  77. package/lib/node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js +11 -12
  78. package/lib/node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js.map +1 -1
  79. package/lib/node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js +12 -15
  80. package/lib/node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js.map +1 -1
  81. package/lib/node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js +1 -1
  82. package/lib/node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js.map +1 -1
  83. package/lib/node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js +4 -4
  84. package/lib/node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js.map +1 -1
  85. package/lib/node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js +35 -59
  86. package/lib/node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js.map +1 -1
  87. package/lib/node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js +2 -2
  88. package/lib/node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js.map +1 -1
  89. package/lib/node_modules/libphonenumber-js/es6/helpers/getNumberType.js +36 -38
  90. package/lib/node_modules/libphonenumber-js/es6/helpers/getNumberType.js.map +1 -1
  91. package/lib/node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js +1 -0
  92. package/lib/node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js.map +1 -1
  93. package/lib/node_modules/libphonenumber-js/es6/helpers/isObject.js.map +1 -1
  94. package/lib/node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js +10 -14
  95. package/lib/node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js.map +1 -1
  96. package/lib/node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js +4 -4
  97. package/lib/node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js.map +1 -1
  98. package/lib/node_modules/libphonenumber-js/es6/helpers/parseDigits.js +27 -22
  99. package/lib/node_modules/libphonenumber-js/es6/helpers/parseDigits.js.map +1 -1
  100. package/lib/node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js +6 -6
  101. package/lib/node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js.map +1 -1
  102. package/lib/node_modules/libphonenumber-js/es6/isPossible.js +7 -6
  103. package/lib/node_modules/libphonenumber-js/es6/isPossible.js.map +1 -1
  104. package/lib/node_modules/libphonenumber-js/es6/isValid.js +5 -6
  105. package/lib/node_modules/libphonenumber-js/es6/isValid.js.map +1 -1
  106. package/lib/node_modules/libphonenumber-js/es6/isValidPhoneNumber.js +26 -44
  107. package/lib/node_modules/libphonenumber-js/es6/isValidPhoneNumber.js.map +1 -1
  108. package/lib/node_modules/libphonenumber-js/es6/metadata.js +69 -120
  109. package/lib/node_modules/libphonenumber-js/es6/metadata.js.map +1 -1
  110. package/lib/node_modules/libphonenumber-js/es6/normalizeArguments.js +68 -87
  111. package/lib/node_modules/libphonenumber-js/es6/normalizeArguments.js.map +1 -1
  112. package/lib/node_modules/libphonenumber-js/es6/parse.js +40 -58
  113. package/lib/node_modules/libphonenumber-js/es6/parse.js.map +1 -1
  114. package/lib/node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js +36 -32
  115. package/lib/node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js.map +1 -1
  116. package/lib/node_modules/libphonenumber-js/es6/parsePhoneNumber.js.map +1 -1
  117. package/lib/node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js +26 -44
  118. package/lib/node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js.map +1 -1
  119. package/lib/node_modules/libphonenumber-js/es6/parsePhoneNumber_.js +28 -46
  120. package/lib/node_modules/libphonenumber-js/es6/parsePhoneNumber_.js.map +1 -1
  121. package/lib/node_modules/libphonenumber-js/es6/tools/semver-compare.js.map +1 -1
  122. package/lib/node_modules/libphonenumber-js/metadata.min.json.js +18 -18
  123. package/lib/node_modules/libphonenumber-js/metadata.min.json.js.map +1 -1
  124. package/lib/node_modules/prop-types/index.js +1 -1
  125. package/lib/node_modules/react-day-picker/dist/esm/DayPicker.js +64 -88
  126. package/lib/node_modules/react-day-picker/dist/esm/DayPicker.js.map +1 -1
  127. package/lib/node_modules/react-day-picker/dist/esm/UI.js.map +1 -1
  128. package/lib/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js.map +1 -1
  129. package/lib/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js.map +1 -1
  130. package/lib/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js.map +1 -1
  131. package/lib/node_modules/react-day-picker/dist/esm/classes/DateLib.js +6 -71
  132. package/lib/node_modules/react-day-picker/dist/esm/classes/DateLib.js.map +1 -1
  133. package/lib/node_modules/react-day-picker/dist/esm/components/Button.js.map +1 -1
  134. package/lib/node_modules/react-day-picker/dist/esm/components/CaptionLabel.js.map +1 -1
  135. package/lib/node_modules/react-day-picker/dist/esm/components/Chevron.js +14 -18
  136. package/lib/node_modules/react-day-picker/dist/esm/components/Chevron.js.map +1 -1
  137. package/lib/node_modules/react-day-picker/dist/esm/components/Day.js.map +1 -1
  138. package/lib/node_modules/react-day-picker/dist/esm/components/DayButton.js.map +1 -1
  139. package/lib/node_modules/react-day-picker/dist/esm/components/Dropdown.js.map +1 -1
  140. package/lib/node_modules/react-day-picker/dist/esm/components/DropdownNav.js.map +1 -1
  141. package/lib/node_modules/react-day-picker/dist/esm/components/Footer.js.map +1 -1
  142. package/lib/node_modules/react-day-picker/dist/esm/components/Month.js.map +1 -1
  143. package/lib/node_modules/react-day-picker/dist/esm/components/MonthCaption.js.map +1 -1
  144. package/lib/node_modules/react-day-picker/dist/esm/components/MonthGrid.js.map +1 -1
  145. package/lib/node_modules/react-day-picker/dist/esm/components/Months.js.map +1 -1
  146. package/lib/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js.map +1 -1
  147. package/lib/node_modules/react-day-picker/dist/esm/components/Nav.js.map +1 -1
  148. package/lib/node_modules/react-day-picker/dist/esm/components/NextMonthButton.js.map +1 -1
  149. package/lib/node_modules/react-day-picker/dist/esm/components/Option.js.map +1 -1
  150. package/lib/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js.map +1 -1
  151. package/lib/node_modules/react-day-picker/dist/esm/components/Root.js.map +1 -1
  152. package/lib/node_modules/react-day-picker/dist/esm/components/Select.js.map +1 -1
  153. package/lib/node_modules/react-day-picker/dist/esm/components/Week.js.map +1 -1
  154. package/lib/node_modules/react-day-picker/dist/esm/components/WeekNumber.js.map +1 -1
  155. package/lib/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js.map +1 -1
  156. package/lib/node_modules/react-day-picker/dist/esm/components/Weekday.js.map +1 -1
  157. package/lib/node_modules/react-day-picker/dist/esm/components/Weekdays.js.map +1 -1
  158. package/lib/node_modules/react-day-picker/dist/esm/components/Weeks.js.map +1 -1
  159. package/lib/node_modules/react-day-picker/dist/esm/components/YearsDropdown.js.map +1 -1
  160. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js +2 -3
  161. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js.map +1 -1
  162. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatDay.js.map +1 -1
  163. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js.map +1 -1
  164. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js.map +1 -1
  165. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js.map +1 -1
  166. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js.map +1 -1
  167. package/lib/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js.map +1 -1
  168. package/lib/node_modules/react-day-picker/dist/esm/formatters/index.js +1 -1
  169. package/lib/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js.map +1 -1
  170. package/lib/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js.map +1 -1
  171. package/lib/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js.map +1 -1
  172. package/lib/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js.map +1 -1
  173. package/lib/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js.map +1 -1
  174. package/lib/node_modules/react-day-picker/dist/esm/helpers/getComponents.js.map +1 -1
  175. package/lib/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js.map +1 -1
  176. package/lib/node_modules/react-day-picker/dist/esm/helpers/getDates.js.map +1 -1
  177. package/lib/node_modules/react-day-picker/dist/esm/helpers/getDays.js +4 -4
  178. package/lib/node_modules/react-day-picker/dist/esm/helpers/getDays.js.map +1 -1
  179. package/lib/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js.map +1 -1
  180. package/lib/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js.map +1 -1
  181. package/lib/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js.map +1 -1
  182. package/lib/node_modules/react-day-picker/dist/esm/helpers/getFormatters.js.map +1 -1
  183. package/lib/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js.map +1 -1
  184. package/lib/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js.map +1 -1
  185. package/lib/node_modules/react-day-picker/dist/esm/helpers/getMonths.js.map +1 -1
  186. package/lib/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js.map +1 -1
  187. package/lib/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js.map +1 -1
  188. package/lib/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js.map +1 -1
  189. package/lib/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js.map +1 -1
  190. package/lib/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js.map +1 -1
  191. package/lib/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js.map +1 -1
  192. package/lib/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js +2 -2
  193. package/lib/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js.map +1 -1
  194. package/lib/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js +11 -9
  195. package/lib/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js.map +1 -1
  196. package/lib/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js.map +1 -1
  197. package/lib/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js.map +1 -1
  198. package/lib/node_modules/react-day-picker/dist/esm/labels/index.js +2 -2
  199. package/lib/node_modules/react-day-picker/dist/esm/labels/labelDayButton.js.map +1 -1
  200. package/lib/node_modules/react-day-picker/dist/esm/labels/labelGrid.js +2 -3
  201. package/lib/node_modules/react-day-picker/dist/esm/labels/labelGrid.js.map +1 -1
  202. package/lib/node_modules/react-day-picker/dist/esm/labels/labelGridcell.js.map +1 -1
  203. package/lib/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js +1 -1
  204. package/lib/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js.map +1 -1
  205. package/lib/node_modules/react-day-picker/dist/esm/labels/labelNav.js.map +1 -1
  206. package/lib/node_modules/react-day-picker/dist/esm/labels/labelNext.js +1 -1
  207. package/lib/node_modules/react-day-picker/dist/esm/labels/labelNext.js.map +1 -1
  208. package/lib/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js +1 -1
  209. package/lib/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js.map +1 -1
  210. package/lib/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js +1 -1
  211. package/lib/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js.map +1 -1
  212. package/lib/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js +1 -1
  213. package/lib/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js.map +1 -1
  214. package/lib/node_modules/react-day-picker/dist/esm/labels/labelWeekday.js.map +1 -1
  215. package/lib/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js +1 -1
  216. package/lib/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js.map +1 -1
  217. package/lib/node_modules/react-day-picker/dist/esm/selection/useMulti.js.map +1 -1
  218. package/lib/node_modules/react-day-picker/dist/esm/selection/useRange.js.map +1 -1
  219. package/lib/node_modules/react-day-picker/dist/esm/selection/useSingle.js.map +1 -1
  220. package/lib/node_modules/react-day-picker/dist/esm/useAnimation.js +1 -1
  221. package/lib/node_modules/react-day-picker/dist/esm/useAnimation.js.map +1 -1
  222. package/lib/node_modules/react-day-picker/dist/esm/useCalendar.js +1 -1
  223. package/lib/node_modules/react-day-picker/dist/esm/useCalendar.js.map +1 -1
  224. package/lib/node_modules/react-day-picker/dist/esm/useDayPicker.js.map +1 -1
  225. package/lib/node_modules/react-day-picker/dist/esm/useFocus.js +0 -6
  226. package/lib/node_modules/react-day-picker/dist/esm/useFocus.js.map +1 -1
  227. package/lib/node_modules/react-day-picker/dist/esm/useSelection.js.map +1 -1
  228. package/lib/node_modules/react-day-picker/dist/esm/utils/addToRange.js +1 -6
  229. package/lib/node_modules/react-day-picker/dist/esm/utils/addToRange.js.map +1 -1
  230. package/lib/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js.map +1 -1
  231. package/lib/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js.map +1 -1
  232. package/lib/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js.map +1 -1
  233. package/lib/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js.map +1 -1
  234. package/lib/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js.map +1 -1
  235. package/lib/node_modules/react-day-picker/dist/esm/utils/typeguards.js.map +1 -1
  236. package/lib/node_modules/react-hook-form/dist/index.esm.js +44 -67
  237. package/lib/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
  238. package/lib/node_modules/react-virtuoso/dist/index.js +1200 -1246
  239. package/lib/node_modules/react-virtuoso/dist/index.js.map +1 -1
  240. package/lib/node_modules/ua-parser-js/src/ua-parser.js +71 -85
  241. package/lib/node_modules/ua-parser-js/src/ua-parser.js.map +1 -1
  242. package/lib/styles.css +1 -1
  243. package/lib/styles.css.map +1 -1
  244. package/lib/tsconfig.tsbuildinfo +1 -1
  245. package/package.json +106 -106
  246. package/lib/node_modules/@date-fns/tz/tzName/index.js +0 -40
  247. package/lib/node_modules/@date-fns/tz/tzName/index.js.map +0 -1
  248. package/lib/node_modules/react-day-picker/node_modules/date-fns/eachYearOfInterval.js +0 -64
  249. package/lib/node_modules/react-day-picker/node_modules/date-fns/eachYearOfInterval.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"janus.es.js","sources":["../../../../../node_modules/janus-gateway/npm/dist/janus.es.js"],"sourcesContent":["/*\n\tThe MIT License (MIT)\n\n\tCopyright (c) 2016 Meetecho\n\n\tPermission is hereby granted, free of charge, to any person obtaining\n\ta copy of this software and associated documentation files (the \"Software\"),\n\tto deal in the Software without restriction, including without limitation\n\tthe rights to use, copy, modify, merge, publish, distribute, sublicense,\n\tand/or sell copies of the Software, and to permit persons to whom the\n\tSoftware is furnished to do so, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included\n\tin all copies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\tOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n\tTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n\tOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n\tARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n\tOTHER DEALINGS IN THE SOFTWARE.\n */\n\n// eslint-disable-next-line no-unused-vars\nvar Janus = (function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory();\n\t} else if (typeof window === 'object') {\n\t\treturn factory();\n\t}\n}(function () {\n\n\t// List of sessions\n\tJanus.sessions = new Map();\n\n\tJanus.isExtensionEnabled = function() {\n\t\tif(navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {\n\t\t\t// No need for the extension, getDisplayMedia is supported\n\t\t\treturn true;\n\t\t}\n\t\tif(window.navigator.userAgent.match('Chrome')) {\n\t\t\tlet chromever = parseInt(window.navigator.userAgent.match(/Chrome\\/(.*) /)[1], 10);\n\t\t\tlet maxver = 33;\n\t\t\tif(window.navigator.userAgent.match('Linux'))\n\t\t\t\tmaxver = 35;\t// \"known\" crash in chrome 34 and 35 on linux\n\t\t\tif(chromever >= 26 && chromever <= maxver) {\n\t\t\t\t// Older versions of Chrome don't support this extension-based approach, so lie\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn Janus.extension.isInstalled();\n\t\t} else {\n\t\t\t// Firefox and others, no need for the extension (but this doesn't mean it will work)\n\t\t\treturn true;\n\t\t}\n\t};\n\n\tvar defaultExtension = {\n\t\t// Screensharing Chrome Extension ID\n\t\textensionId: 'hapfgfdkleiggjjpfpenajgdnfckjpaj',\n\t\tisInstalled: function() { return document.querySelector('#janus-extension-installed') !== null; },\n\t\tgetScreen: function (callback) {\n\t\t\tlet pending = window.setTimeout(function () {\n\t\t\t\tlet error = new Error('NavigatorUserMediaError');\n\t\t\t\terror.name = 'The required Chrome extension is not installed: click <a href=\"#\">here</a> to install it. (NOTE: this will need you to refresh the page)';\n\t\t\t\treturn callback(error);\n\t\t\t}, 1000);\n\t\t\tthis.cache[pending] = callback;\n\t\t\twindow.postMessage({ type: 'janusGetScreen', id: pending }, '*');\n\t\t},\n\t\tinit: function () {\n\t\t\tlet cache = {};\n\t\t\tthis.cache = cache;\n\t\t\t// Wait for events from the Chrome Extension\n\t\t\twindow.addEventListener('message', function (event) {\n\t\t\t\tif(event.origin != window.location.origin)\n\t\t\t\t\treturn;\n\t\t\t\tif(event.data.type == 'janusGotScreen' && cache[event.data.id]) {\n\t\t\t\t\tlet callback = cache[event.data.id];\n\t\t\t\t\tdelete cache[event.data.id];\n\t\t\t\t\tif(event.data.sourceId === '') {\n\t\t\t\t\t\t// user canceled\n\t\t\t\t\t\tlet error = new Error('NavigatorUserMediaError');\n\t\t\t\t\t\terror.name = 'You cancelled the request for permission, giving up...';\n\t\t\t\t\t\tcallback(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(null, event.data.sourceId);\n\t\t\t\t\t}\n\t\t\t\t} else if(event.data.type == 'janusGetScreenPending') {\n\t\t\t\t\twindow.clearTimeout(event.data.id);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tJanus.useDefaultDependencies = function (deps) {\n\t\tlet f = (deps && deps.fetch) || fetch;\n\t\tlet p = (deps && deps.Promise) || Promise;\n\t\tlet socketCls = (deps && deps.WebSocket) || WebSocket;\n\n\t\treturn {\n\t\t\tnewWebSocket: function(server, proto) { return new socketCls(server, proto); },\n\t\t\textension: (deps && deps.extension) || defaultExtension,\n\t\t\tisArray: function(arr) { return Array.isArray(arr); },\n\t\t\twebRTCAdapter: (deps && deps.adapter) || adapter,\n\t\t\thttpAPICall: function(url, options) {\n\t\t\t\tlet fetchOptions = {\n\t\t\t\t\tmethod: options.verb,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Accept': 'application/json, text/plain, */*'\n\t\t\t\t\t},\n\t\t\t\t\tcache: 'no-cache'\n\t\t\t\t};\n\t\t\t\tif(options.verb === \"POST\") {\n\t\t\t\t\tfetchOptions.headers['Content-Type'] = 'application/json';\n\t\t\t\t}\n\t\t\t\tif(typeof options.withCredentials !== 'undefined') {\n\t\t\t\t\tfetchOptions.credentials = options.withCredentials === true ? 'include' : (options.withCredentials ? options.withCredentials : 'omit');\n\t\t\t\t}\n\t\t\t\tif(options.body) {\n\t\t\t\t\tfetchOptions.body = JSON.stringify(options.body);\n\t\t\t\t}\n\n\t\t\t\tlet fetching = f(url, fetchOptions).catch(function(error) {\n\t\t\t\t\treturn p.reject({message: 'Probably a network error, is the server down?', error: error});\n\t\t\t\t});\n\n\t\t\t\t/*\n\t\t\t * fetch() does not natively support timeouts.\n\t\t\t * Work around this by starting a timeout manually, and racing it agains the fetch() to see which thing resolves first.\n\t\t\t */\n\n\t\t\t\tif(options.timeout) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet timeout = new p(function(resolve, reject) {\n\t\t\t\t\t\tlet timerId = setTimeout(function() {\n\t\t\t\t\t\t\tclearTimeout(timerId);\n\t\t\t\t\t\t\treturn reject({message: 'Request timed out', timeout: options.timeout});\n\t\t\t\t\t\t}, options.timeout);\n\t\t\t\t\t});\n\t\t\t\t\tfetching = p.race([fetching, timeout]);\n\t\t\t\t}\n\n\t\t\t\tfetching.then(function(response) {\n\t\t\t\t\tif(response.ok) {\n\t\t\t\t\t\tif(typeof(options.success) === typeof(Janus.noop)) {\n\t\t\t\t\t\t\treturn response.json().then(function(parsed) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\toptions.success(parsed);\n\t\t\t\t\t\t\t\t} catch(error) {\n\t\t\t\t\t\t\t\t\tJanus.error('Unhandled httpAPICall success callback error', error);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, function(error) {\n\t\t\t\t\t\t\t\treturn p.reject({message: 'Failed to parse response body', error: error, response: response});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn p.reject({message: 'API call failed', response: response});\n\t\t\t\t\t}\n\t\t\t\t}).catch(function(error) {\n\t\t\t\t\tif(typeof(options.error) === typeof(Janus.noop)) {\n\t\t\t\t\t\toptions.error(error.message || '<< internal error >>', error);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn fetching;\n\t\t\t}\n\t\t}\n\t};\n\n\tJanus.useOldDependencies = function (deps) {\n\t\tlet jq = (deps && deps.jQuery) || jQuery;\n\t\tlet socketCls = (deps && deps.WebSocket) || WebSocket;\n\t\treturn {\n\t\t\tnewWebSocket: function(server, proto) { return new socketCls(server, proto); },\n\t\t\tisArray: function(arr) { return jq.isArray(arr); },\n\t\t\textension: (deps && deps.extension) || defaultExtension,\n\t\t\twebRTCAdapter: (deps && deps.adapter) || adapter,\n\t\t\thttpAPICall: function(url, options) {\n\t\t\t\tlet payload = (typeof options.body !== 'undefined') ? {\n\t\t\t\t\tcontentType: 'application/json',\n\t\t\t\t\tdata: JSON.stringify(options.body)\n\t\t\t\t} : {};\n\t\t\t\tlet credentials = (typeof options.withCredentials !== 'undefined') ? {xhrFields: {withCredentials: options.withCredentials}} : {};\n\n\t\t\t\treturn jq.ajax(jq.extend(payload, credentials, {\n\t\t\t\t\turl: url,\n\t\t\t\t\ttype: options.verb,\n\t\t\t\t\tcache: false,\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\tasync: options.async,\n\t\t\t\t\ttimeout: options.timeout,\n\t\t\t\t\tsuccess: function(result) {\n\t\t\t\t\t\tif(typeof(options.success) === typeof(Janus.noop)) {\n\t\t\t\t\t\t\toptions.success(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\terror: function(xhr, status, err) {\n\t\t\t\t\t\tif(typeof(options.error) === typeof(Janus.noop)) {\n\t\t\t\t\t\t\toptions.error(status, err);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\t\t};\n\t};\n\n\t// Helper function to convert a deprecated media object to a tracks array\n\tJanus.mediaToTracks = function(media) {\n\t\tlet tracks = [];\n\t\tif(!media) {\n\t\t\t// Default is bidirectional audio and video, using default devices\n\t\t\ttracks.push({ type: 'audio', capture: true, recv: true });\n\t\t\ttracks.push({ type: 'video', capture: true, recv: true });\n\t\t} else {\n\t\t\tif(!media.keepAudio && media.audio !== false && ((typeof media.audio === 'undefined') || media.audio || media.audioSend || media.audioRecv ||\n\t\t\t\t\tmedia.addAudio || media.replaceAudio || media.removeAudio)) {\n\t\t\t\t// We may need an audio track\n\t\t\t\tlet track = { type: 'audio' };\n\t\t\t\tif(media.removeAudio) {\n\t\t\t\t\ttrack.remove = true;\n\t\t\t\t} else {\n\t\t\t\t\tif(media.addAudio)\n\t\t\t\t\t\ttrack.add = true;\n\t\t\t\t\telse if(media.replaceAudio)\n\t\t\t\t\t\ttrack.replace = true;\n\t\t\t\t\t// Check if we need to capture an audio device\n\t\t\t\t\tif(media.audioSend !== false)\n\t\t\t\t\t\ttrack.capture = media.audio || true;\n\t\t\t\t\t// Check if we need to receive audio\n\t\t\t\t\tif(media.audioRecv !== false)\n\t\t\t\t\t\ttrack.recv = true;\n\t\t\t\t}\n\t\t\t\t// Add an audio track if needed\n\t\t\t\tif(track.remove || track.capture || track.recv)\n\t\t\t\t\ttracks.push(track);\n\t\t\t}\n\t\t\tif(!media.keepVideo && media.video !== false && ((typeof media.video === 'undefined') || media.video || media.videoSend || media.videoRecv ||\n\t\t\t\t\tmedia.addVideo || media.replaceVideo || media.removeVideo)) {\n\t\t\t\t// We may need a video track\n\t\t\t\tlet track = { type: 'video' };\n\t\t\t\tif(media.removeVideo) {\n\t\t\t\t\ttrack.remove = true;\n\t\t\t\t} else {\n\t\t\t\t\tif(media.addVideo)\n\t\t\t\t\t\ttrack.add = true;\n\t\t\t\t\telse if(media.replaceVideo)\n\t\t\t\t\t\ttrack.replace = true;\n\t\t\t\t\t// Check if we need to capture a video device\n\t\t\t\t\tif(media.videoSend !== false) {\n\t\t\t\t\t\ttrack.capture = media.video || true;\n\t\t\t\t\t\tif(['screen', 'window', 'desktop'].includes(track.capture)) {\n\t\t\t\t\t\t\t// Change the type to 'screen'\n\t\t\t\t\t\t\ttrack.type = 'screen';\n\t\t\t\t\t\t\ttrack.capture = { video: {} };\n\t\t\t\t\t\t\t// Check if there's constraints\n\t\t\t\t\t\t\tif(media.screenshareFrameRate)\n\t\t\t\t\t\t\t\ttrack.capture.frameRate = media.screenshareFrameRate;\n\t\t\t\t\t\t\tif(media.screenshareHeight)\n\t\t\t\t\t\t\t\ttrack.capture.height = media.screenshareHeight;\n\t\t\t\t\t\t\tif(media.screenshareWidth)\n\t\t\t\t\t\t\t\ttrack.capture.width = media.screenshareWidth;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Check if we need to receive video\n\t\t\t\t\tif(media.videoRecv !== false)\n\t\t\t\t\t\ttrack.recv = true;\n\t\t\t\t}\n\t\t\t\t// Add a video track if needed\n\t\t\t\tif(track.remove || track.capture || track.recv)\n\t\t\t\t\ttracks.push(track);\n\t\t\t}\n\t\t\tif(media.data) {\n\t\t\t\t// We need a data channel\n\t\t\t\ttracks.push({ type: 'data' });\n\t\t\t}\n\t\t}\n\t\t// Done\n\t\treturn tracks;\n\t};\n\n\t// Helper function to convert a track object to a set of constraints\n\tJanus.trackConstraints = function(track) {\n\t\tlet constraints = {};\n\t\tif(!track || !track.capture)\n\t\t\treturn constraints;\n\t\tif(track.type === 'audio') {\n\t\t\t// Just put the capture part in the constraints\n\t\t\tconstraints.audio = track.capture;\n\t\t} else if(track.type === 'video') {\n\t\t\t// Check if one of the keywords was passed\n\t\t\tif((track.simulcast || track.svc) && track.capture === true)\n\t\t\t\ttrack.capture = 'hires';\n\t\t\tif(track.capture === true || typeof track.capture === 'object') {\n\t\t\t\t// Use the provided capture object as video constraint\n\t\t\t\tconstraints.video = track.capture;\n\t\t\t} else {\n\t\t\t\tlet width = 0;\n\t\t\t\tlet height = 0;\n\t\t\t\tif(track.capture === 'lowres') {\n\t\t\t\t\t// Small resolution, 4:3\n\t\t\t\t\twidth = 320;\n\t\t\t\t\theight = 240;\n\t\t\t\t} else if(track.capture === 'lowres-16:9') {\n\t\t\t\t\t// Small resolution, 16:9\n\t\t\t\t\twidth = 320;\n\t\t\t\t\theight = 180;\n\t\t\t\t} else if(track.capture === 'hires' || track.capture === 'hires-16:9' || track.capture === 'hdres') {\n\t\t\t\t\t// High(HD) resolution is only 16:9\n\t\t\t\t\twidth = 1280;\n\t\t\t\t\theight = 720;\n\t\t\t\t} else if(track.capture === 'fhdres') {\n\t\t\t\t\t// Full HD resolution is only 16:9\n\t\t\t\t\twidth = 1920;\n\t\t\t\t\theight = 1080;\n\t\t\t\t} else if(track.capture === '4kres') {\n\t\t\t\t\t// 4K resolution is only 16:9\n\t\t\t\t\twidth = 3840;\n\t\t\t\t\theight = 2160;\n\t\t\t\t} else if(track.capture === 'stdres') {\n\t\t\t\t\t// Normal resolution, 4:3\n\t\t\t\t\twidth = 640;\n\t\t\t\t\theight = 480;\n\t\t\t\t} else if(track.capture === 'stdres-16:9') {\n\t\t\t\t\t// Normal resolution, 16:9\n\t\t\t\t\twidth = 640;\n\t\t\t\t\theight = 360;\n\t\t\t\t} else {\n\t\t\t\t\tJanus.log('Default video setting is stdres 4:3');\n\t\t\t\t\twidth = 640;\n\t\t\t\t\theight = 480;\n\t\t\t\t}\n\t\t\t\tconstraints.video = {\n\t\t\t\t\twidth: { ideal: width },\n\t\t\t\t\theight: { ideal: height }\n\t\t\t\t};\n\t\t\t}\n\t\t} else if(track.type === 'screen') {\n\t\t\t// Use the provided capture object as video constraint\n\t\t\tconstraints.video = track.capture;\n\t\t}\n\t\treturn constraints;\n\t};\n\n\tJanus.noop = function() {};\n\n\tJanus.dataChanDefaultLabel = \"JanusDataChannel\";\n\n\t// Note: in the future we may want to change this, e.g., as was\n\t// attempted in https://github.com/meetecho/janus-gateway/issues/1670\n\tJanus.endOfCandidates = null;\n\n\t// Stop all tracks from a given stream\n\tJanus.stopAllTracks = function(stream) {\n\t\ttry {\n\t\t\t// Try a MediaStreamTrack.stop() for each track\n\t\t\tlet tracks = stream.getTracks();\n\t\t\tfor(let mst of tracks) {\n\t\t\t\tJanus.log(mst);\n\t\t\t\tif(mst && mst.dontStop !== true) {\n\t\t\t\t\tmst.stop();\n\t\t\t\t}\n\t\t\t}\n\t\t// eslint-disable-next-line no-unused-vars\n\t\t} catch(e) {\n\t\t\t// Do nothing if this fails\n\t\t}\n\t};\n\n\t// Initialization\n\tJanus.init = function(options) {\n\t\toptions = options || {};\n\t\toptions.callback = (typeof options.callback == \"function\") ? options.callback : Janus.noop;\n\t\tif(Janus.initDone) {\n\t\t\t// Already initialized\n\t\t\toptions.callback();\n\t\t} else {\n\t\t\tif(typeof console.log == \"undefined\") {\n\t\t\t\tconsole.log = function() {};\n\t\t\t}\n\t\t\t// Console logging (all debugging disabled by default)\n\t\t\tJanus.trace = Janus.noop;\n\t\t\tJanus.debug = Janus.noop;\n\t\t\tJanus.vdebug = Janus.noop;\n\t\t\tJanus.log = Janus.noop;\n\t\t\tJanus.warn = Janus.noop;\n\t\t\tJanus.error = Janus.noop;\n\t\t\tif(options.debug === true || options.debug === \"all\") {\n\t\t\t\t// Enable all debugging levels\n\t\t\t\tJanus.trace = console.trace.bind(console);\n\t\t\t\tJanus.debug = console.debug.bind(console);\n\t\t\t\tJanus.vdebug = console.debug.bind(console);\n\t\t\t\tJanus.log = console.log.bind(console);\n\t\t\t\tJanus.warn = console.warn.bind(console);\n\t\t\t\tJanus.error = console.error.bind(console);\n\t\t\t} else if(Array.isArray(options.debug)) {\n\t\t\t\tfor(let d of options.debug) {\n\t\t\t\t\tswitch(d) {\n\t\t\t\t\t\tcase \"trace\":\n\t\t\t\t\t\t\tJanus.trace = console.trace.bind(console);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"debug\":\n\t\t\t\t\t\t\tJanus.debug = console.debug.bind(console);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"vdebug\":\n\t\t\t\t\t\t\tJanus.vdebug = console.debug.bind(console);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"log\":\n\t\t\t\t\t\t\tJanus.log = console.log.bind(console);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"warn\":\n\t\t\t\t\t\t\tJanus.warn = console.warn.bind(console);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"error\":\n\t\t\t\t\t\t\tJanus.error = console.error.bind(console);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tJanus.log(\"Initializing library\");\n\n\t\t\tlet usedDependencies = options.dependencies || Janus.useDefaultDependencies();\n\t\t\tJanus.isArray = usedDependencies.isArray;\n\t\t\tJanus.webRTCAdapter = usedDependencies.webRTCAdapter;\n\t\t\tJanus.httpAPICall = usedDependencies.httpAPICall;\n\t\t\tJanus.newWebSocket = usedDependencies.newWebSocket;\n\t\t\tJanus.extension = usedDependencies.extension;\n\t\t\tJanus.extension.init();\n\n\t\t\t// Helper method to enumerate devices\n\t\t\tJanus.listDevices = function(callback, config) {\n\t\t\t\tcallback = (typeof callback == \"function\") ? callback : Janus.noop;\n\t\t\t\tif(!config)\n\t\t\t\t\tconfig = { audio: true, video: true };\n\t\t\t\tif(Janus.isGetUserMediaAvailable()) {\n\t\t\t\t\tnavigator.mediaDevices.getUserMedia(config)\n\t\t\t\t\t\t.then(function(stream) {\n\t\t\t\t\t\t\tnavigator.mediaDevices.enumerateDevices().then(function(devices) {\n\t\t\t\t\t\t\t\tJanus.debug(devices);\n\t\t\t\t\t\t\t\tcallback(devices);\n\t\t\t\t\t\t\t\t// Get rid of the now useless stream\n\t\t\t\t\t\t\t\tJanus.stopAllTracks(stream);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(function(err) {\n\t\t\t\t\t\t\tJanus.error(err);\n\t\t\t\t\t\t\tcallback([]);\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tJanus.warn(\"navigator.mediaDevices unavailable\");\n\t\t\t\t\tcallback([]);\n\t\t\t\t}\n\t\t\t};\n\t\t\t// Helper methods to attach/reattach a stream to a video element (previously part of adapter.js)\n\t\t\tJanus.attachMediaStream = function(element, stream) {\n\t\t\t\ttry {\n\t\t\t\t\telement.srcObject = stream;\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t} catch (e) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\telement.src = URL.createObjectURL(stream);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tJanus.error(\"Error attaching stream to element\", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tJanus.reattachMediaStream = function(to, from) {\n\t\t\t\ttry {\n\t\t\t\t\tto.srcObject = from.srcObject;\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t} catch (e) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tto.src = from.src;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tJanus.error(\"Error reattaching stream to element\", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t// Detect tab close: make sure we don't loose existing onbeforeunload handlers\n\t\t\t// (note: for iOS we need to subscribe to a different event, 'pagehide', see\n\t\t\t// https://gist.github.com/thehunmonkgroup/6bee8941a49b86be31a787fe8f4b8cfe)\n\t\t\tlet iOS = ['iPad', 'iPhone', 'iPod'].indexOf(navigator.platform) >= 0;\n\t\t\tlet eventName = iOS ? 'pagehide' : 'beforeunload';\n\t\t\tlet oldOBF = window[\"on\" + eventName];\n\t\t\twindow.addEventListener(eventName, function() {\n\t\t\t\tJanus.log(\"Closing window\");\n\t\t\t\tfor(const [sessionId, session] of Janus.sessions) {\n\t\t\t\t\tif(session && session.destroyOnUnload) {\n\t\t\t\t\t\tJanus.log(\"Destroying session \" + sessionId);\n\t\t\t\t\t\tsession.destroy({unload: true, notifyDestroyed: false});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(oldOBF && typeof oldOBF == \"function\") {\n\t\t\t\t\toldOBF();\n\t\t\t\t}\n\t\t\t});\n\t\t\t// If this is a Safari, check if VP8 or VP9 are supported\n\t\t\tJanus.safariVp8 = false;\n\t\t\tJanus.safariVp9 = false;\n\t\t\tif(Janus.webRTCAdapter.browserDetails.browser === 'safari' &&\n\t\t\t\tJanus.webRTCAdapter.browserDetails.version >= 605) {\n\t\t\t\t// Let's see if RTCRtpSender.getCapabilities() is there\n\t\t\t\tif(RTCRtpSender && RTCRtpSender.getCapabilities && RTCRtpSender.getCapabilities(\"video\") &&\n\t\t\t\t\tRTCRtpSender.getCapabilities(\"video\").codecs && RTCRtpSender.getCapabilities(\"video\").codecs.length) {\n\t\t\t\t\tfor(let codec of RTCRtpSender.getCapabilities(\"video\").codecs) {\n\t\t\t\t\t\tif(codec && codec.mimeType && codec.mimeType.toLowerCase() === \"video/vp8\") {\n\t\t\t\t\t\t\tJanus.safariVp8 = true;\n\t\t\t\t\t\t} else if(codec && codec.mimeType && codec.mimeType.toLowerCase() === \"video/vp9\") {\n\t\t\t\t\t\t\tJanus.safariVp9 = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(Janus.safariVp8) {\n\t\t\t\t\t\tJanus.log(\"This version of Safari supports VP8\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tJanus.warn(\"This version of Safari does NOT support VP8: if you're using a Technology Preview, \" +\n\t\t\t\t\t\t\"try enabling the 'WebRTC VP8 codec' setting in the 'Experimental Features' Develop menu\");\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// We do it in a very ugly way, as there's no alternative...\n\t\t\t\t\t// We create a PeerConnection to see if VP8 is in an offer\n\t\t\t\t\tlet testpc = new RTCPeerConnection({});\n\t\t\t\t\ttestpc.createOffer({offerToReceiveVideo: true}).then(function(offer) {\n\t\t\t\t\t\tJanus.safariVp8 = offer.sdp.indexOf(\"VP8\") !== -1;\n\t\t\t\t\t\tJanus.safariVp9 = offer.sdp.indexOf(\"VP9\") !== -1;\n\t\t\t\t\t\tif(Janus.safariVp8) {\n\t\t\t\t\t\t\tJanus.log(\"This version of Safari supports VP8\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tJanus.warn(\"This version of Safari does NOT support VP8: if you're using a Technology Preview, \" +\n\t\t\t\t\t\t\t\"try enabling the 'WebRTC VP8 codec' setting in the 'Experimental Features' Develop menu\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttestpc.close();\n\t\t\t\t\t\ttestpc = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tJanus.initDone = true;\n\t\t\toptions.callback();\n\t\t}\n\t};\n\n\t// Helper method to check whether WebRTC is supported by this browser\n\tJanus.isWebrtcSupported = function() {\n\t\treturn !!window.RTCPeerConnection;\n\t};\n\t// Helper method to check whether devices can be accessed by this browser (e.g., not possible via plain HTTP)\n\tJanus.isGetUserMediaAvailable = function() {\n\t\treturn navigator.mediaDevices && navigator.mediaDevices.getUserMedia;\n\t};\n\n\t// Helper method to create random identifiers (e.g., transaction)\n\tJanus.randomString = function(len) {\n\t\tlet charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\t\tlet randomString = '';\n\t\tfor(let i=0; i<len; i++) {\n\t\t\tlet randomPoz = Math.floor(Math.random() * charSet.length);\n\t\t\trandomString += charSet.charAt(randomPoz);\n\t\t}\n\t\treturn randomString;\n\t};\n\n\tfunction Janus(gatewayCallbacks) {\n\t\tgatewayCallbacks = gatewayCallbacks || {};\n\t\tgatewayCallbacks.success = (typeof gatewayCallbacks.success == \"function\") ? gatewayCallbacks.success : Janus.noop;\n\t\tgatewayCallbacks.error = (typeof gatewayCallbacks.error == \"function\") ? gatewayCallbacks.error : Janus.noop;\n\t\tgatewayCallbacks.destroyed = (typeof gatewayCallbacks.destroyed == \"function\") ? gatewayCallbacks.destroyed : Janus.noop;\n\t\tif(!Janus.initDone) {\n\t\t\tgatewayCallbacks.error(\"Library not initialized\");\n\t\t\treturn {};\n\t\t}\n\t\tif(!Janus.isWebrtcSupported()) {\n\t\t\tgatewayCallbacks.error(\"WebRTC not supported by this browser\");\n\t\t\treturn {};\n\t\t}\n\t\tJanus.log(\"Library initialized: \" + Janus.initDone);\n\t\tif(!gatewayCallbacks.server) {\n\t\t\tgatewayCallbacks.error(\"Invalid server url\");\n\t\t\treturn {};\n\t\t}\n\t\tlet websockets = false;\n\t\tlet ws = null;\n\t\tlet wsHandlers = {};\n\t\tlet wsKeepaliveTimeoutId = null;\n\t\tlet servers = null;\n\t\tlet serversIndex = 0;\n\t\tlet server = gatewayCallbacks.server;\n\t\tif(Janus.isArray(server)) {\n\t\t\tJanus.log(\"Multiple servers provided (\" + server.length + \"), will use the first that works\");\n\t\t\tserver = null;\n\t\t\tservers = gatewayCallbacks.server;\n\t\t\tJanus.debug(servers);\n\t\t} else {\n\t\t\tif(server.indexOf(\"ws\") === 0) {\n\t\t\t\twebsockets = true;\n\t\t\t\tJanus.log(\"Using WebSockets to contact Janus: \" + server);\n\t\t\t} else {\n\t\t\t\twebsockets = false;\n\t\t\t\tJanus.log(\"Using REST API to contact Janus: \" + server);\n\t\t\t}\n\t\t}\n\t\tlet iceServers = gatewayCallbacks.iceServers || [{urls: \"stun:stun.l.google.com:19302\"}];\n\t\tlet iceTransportPolicy = gatewayCallbacks.iceTransportPolicy;\n\t\tlet bundlePolicy = gatewayCallbacks.bundlePolicy;\n\t\t// Whether we should enable the withCredentials flag for XHR requests\n\t\tlet withCredentials = false;\n\t\tif(typeof gatewayCallbacks.withCredentials !== 'undefined' && gatewayCallbacks.withCredentials !== null)\n\t\t\twithCredentials = gatewayCallbacks.withCredentials === true;\n\t\t// Optional max events\n\t\tlet maxev = 10;\n\t\tif(typeof gatewayCallbacks.max_poll_events !== 'undefined' && gatewayCallbacks.max_poll_events !== null)\n\t\t\tmaxev = gatewayCallbacks.max_poll_events;\n\t\tif(maxev < 1)\n\t\t\tmaxev = 1;\n\t\t// Token to use (only if the token based authentication mechanism is enabled)\n\t\tlet token = null;\n\t\tif(typeof gatewayCallbacks.token !== 'undefined' && gatewayCallbacks.token !== null)\n\t\t\ttoken = gatewayCallbacks.token;\n\t\t// API secret to use (only if the shared API secret is enabled)\n\t\tlet apisecret = null;\n\t\tif(typeof gatewayCallbacks.apisecret !== 'undefined' && gatewayCallbacks.apisecret !== null)\n\t\t\tapisecret = gatewayCallbacks.apisecret;\n\t\t// Whether we should destroy this session when onbeforeunload is called\n\t\tthis.destroyOnUnload = true;\n\t\tif(typeof gatewayCallbacks.destroyOnUnload !== 'undefined' && gatewayCallbacks.destroyOnUnload !== null)\n\t\t\tthis.destroyOnUnload = (gatewayCallbacks.destroyOnUnload === true);\n\t\t// Some timeout-related values\n\t\tlet keepAlivePeriod = 25000;\n\t\tif(typeof gatewayCallbacks.keepAlivePeriod !== 'undefined' && gatewayCallbacks.keepAlivePeriod !== null)\n\t\t\tkeepAlivePeriod = gatewayCallbacks.keepAlivePeriod;\n\t\tif(isNaN(keepAlivePeriod))\n\t\t\tkeepAlivePeriod = 25000;\n\t\tlet longPollTimeout = 60000;\n\t\tif(typeof gatewayCallbacks.longPollTimeout !== 'undefined' && gatewayCallbacks.longPollTimeout !== null)\n\t\t\tlongPollTimeout = gatewayCallbacks.longPollTimeout;\n\t\tif(isNaN(longPollTimeout))\n\t\t\tlongPollTimeout = 60000;\n\n\t\t// overrides for default maxBitrate values for simulcasting\n\t\tfunction getMaxBitrates(simulcastMaxBitrates) {\n\t\t\tlet maxBitrates = {\n\t\t\t\thigh: 900000,\n\t\t\t\tmedium: 300000,\n\t\t\t\tlow: 100000,\n\t\t\t};\n\n\t\t\tif(typeof simulcastMaxBitrates !== 'undefined' && simulcastMaxBitrates !== null) {\n\t\t\t\tif(simulcastMaxBitrates.high)\n\t\t\t\t\tmaxBitrates.high = simulcastMaxBitrates.high;\n\t\t\t\tif(simulcastMaxBitrates.medium)\n\t\t\t\t\tmaxBitrates.medium = simulcastMaxBitrates.medium;\n\t\t\t\tif(simulcastMaxBitrates.low)\n\t\t\t\t\tmaxBitrates.low = simulcastMaxBitrates.low;\n\t\t\t}\n\n\t\t\treturn maxBitrates;\n\t\t}\n\n\t\tlet connected = false;\n\t\tlet sessionId = null;\n\t\tlet pluginHandles = new Map();\n\t\tlet that = this;\n\t\tlet retries = 0;\n\t\tlet transactions = new Map();\n\t\tcreateSession(gatewayCallbacks);\n\n\t\t// Public methods\n\t\tthis.getServer = function() { return server; };\n\t\tthis.isConnected = function() { return connected; };\n\t\tthis.reconnect = function(callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tcallbacks[\"reconnect\"] = true;\n\t\t\tcreateSession(callbacks);\n\t\t};\n\t\tthis.getSessionId = function() { return sessionId; };\n\t\tthis.getInfo = function(callbacks) { getInfo(callbacks); };\n\t\tthis.destroy = function(callbacks) { destroySession(callbacks); };\n\t\tthis.attach = function(callbacks) { createHandle(callbacks); };\n\n\t\tfunction eventHandler() {\n\t\t\tif(sessionId == null)\n\t\t\t\treturn;\n\t\t\tJanus.debug('Long poll...');\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet longpoll = server + \"/\" + sessionId + \"?rid=\" + new Date().getTime();\n\t\t\tif(maxev)\n\t\t\t\tlongpoll = longpoll + \"&maxev=\" + maxev;\n\t\t\tif(token)\n\t\t\t\tlongpoll = longpoll + \"&token=\" + encodeURIComponent(token);\n\t\t\tif(apisecret)\n\t\t\t\tlongpoll = longpoll + \"&apisecret=\" + encodeURIComponent(apisecret);\n\t\t\tJanus.httpAPICall(longpoll, {\n\t\t\t\tverb: 'GET',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tsuccess: handleEvent,\n\t\t\t\ttimeout: longPollTimeout,\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\n\t\t\t\t\tretries++;\n\t\t\t\t\tif(retries > 3) {\n\t\t\t\t\t\t// Did we just lose the server? :-(\n\t\t\t\t\t\tconnected = false;\n\t\t\t\t\t\tgatewayCallbacks.error(\"Lost connection to the server (is it down?)\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\teventHandler();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private event handler: this will trigger plugin callbacks, if set\n\t\tfunction handleEvent(json, skipTimeout) {\n\t\t\tretries = 0;\n\t\t\tif(!websockets && typeof sessionId !== 'undefined' && sessionId !== null && skipTimeout !== true)\n\t\t\t\teventHandler();\n\t\t\tif(!websockets && Janus.isArray(json)) {\n\t\t\t\t// We got an array: it means we passed a maxev > 1, iterate on all objects\n\t\t\t\tfor(let i=0; i<json.length; i++) {\n\t\t\t\t\thandleEvent(json[i], true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(json[\"janus\"] === \"keepalive\") {\n\t\t\t\t// Nothing happened\n\t\t\t\tJanus.vdebug(\"Got a keepalive on session \" + sessionId);\n\t\t\t\treturn;\n\t\t\t} else if(json[\"janus\"] === \"server_info\") {\n\t\t\t\t// Just info on the Janus instance\n\t\t\t\tJanus.debug(\"Got info on the Janus instance\");\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst transaction = json[\"transaction\"];\n\t\t\t\tif(transaction) {\n\t\t\t\t\tconst reportSuccess = transactions.get(transaction);\n\t\t\t\t\tif(reportSuccess)\n\t\t\t\t\t\treportSuccess(json);\n\t\t\t\t\ttransactions.delete(transaction);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if(json[\"janus\"] === \"ack\") {\n\t\t\t\t// Just an ack, we can probably ignore\n\t\t\t\tJanus.debug(\"Got an ack on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst transaction = json[\"transaction\"];\n\t\t\t\tif(transaction) {\n\t\t\t\t\tconst reportSuccess = transactions.get(transaction);\n\t\t\t\t\tif(reportSuccess)\n\t\t\t\t\t\treportSuccess(json);\n\t\t\t\t\ttransactions.delete(transaction);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if(json[\"janus\"] === \"success\") {\n\t\t\t\t// Success!\n\t\t\t\tJanus.debug(\"Got a success on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst transaction = json[\"transaction\"];\n\t\t\t\tif(transaction) {\n\t\t\t\t\tconst reportSuccess = transactions.get(transaction);\n\t\t\t\t\tif(reportSuccess)\n\t\t\t\t\t\treportSuccess(json);\n\t\t\t\t\ttransactions.delete(transaction);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if(json[\"janus\"] === \"trickle\") {\n\t\t\t\t// We got a trickle candidate from Janus\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\tJanus.debug(\"This handle is not attached to this session\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet candidate = json[\"candidate\"];\n\t\t\t\tJanus.debug(\"Got a trickled candidate on session \" + sessionId);\n\t\t\t\tJanus.debug(candidate);\n\t\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\t\tif(config.pc && config.remoteSdp) {\n\t\t\t\t\t// Add candidate right now\n\t\t\t\t\tJanus.debug(\"Adding remote candidate:\", candidate);\n\t\t\t\t\tif(!candidate || candidate.completed === true) {\n\t\t\t\t\t\t// end-of-candidates\n\t\t\t\t\t\tconfig.pc.addIceCandidate(Janus.endOfCandidates);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// New candidate\n\t\t\t\t\t\tconfig.pc.addIceCandidate(candidate);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't do setRemoteDescription (trickle got here before the offer?)\n\t\t\t\t\tJanus.debug(\"We didn't do setRemoteDescription (trickle got here before the offer?), caching candidate\");\n\t\t\t\t\tif(!config.candidates)\n\t\t\t\t\t\tconfig.candidates = [];\n\t\t\t\t\tconfig.candidates.push(candidate);\n\t\t\t\t\tJanus.debug(config.candidates);\n\t\t\t\t}\n\t\t\t} else if(json[\"janus\"] === \"webrtcup\") {\n\t\t\t\t// The PeerConnection with the server is up! Notify this\n\t\t\t\tJanus.debug(\"Got a webrtcup event on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\tJanus.debug(\"This handle is not attached to this session\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpluginHandle.webrtcState(true);\n\t\t\t\treturn;\n\t\t\t} else if(json[\"janus\"] === \"hangup\") {\n\t\t\t\t// A plugin asked the core to hangup a PeerConnection on one of our handles\n\t\t\t\tJanus.debug(\"Got a hangup event on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\tJanus.debug(\"This handle is not attached to this session\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpluginHandle.webrtcState(false, json[\"reason\"]);\n\t\t\t\tpluginHandle.hangup();\n\t\t\t} else if(json[\"janus\"] === \"detached\") {\n\t\t\t\t// A plugin asked the core to detach one of our handles\n\t\t\t\tJanus.debug(\"Got a detached event on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\t// Don't warn here because destroyHandle causes this situation.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpluginHandle.ondetached();\n\t\t\t\tpluginHandle.detach();\n\t\t\t} else if(json[\"janus\"] === \"media\") {\n\t\t\t\t// Media started/stopped flowing\n\t\t\t\tJanus.debug(\"Got a media event on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\tJanus.debug(\"This handle is not attached to this session\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpluginHandle.mediaState(json[\"type\"], json[\"receiving\"], json[\"mid\"]);\n\t\t\t} else if(json[\"janus\"] === \"slowlink\") {\n\t\t\t\tJanus.debug(\"Got a slowlink event on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\t// Trouble uplink or downlink\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\tJanus.debug(\"This handle is not attached to this session\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpluginHandle.slowLink(json[\"uplink\"], json[\"lost\"], json[\"mid\"]);\n\t\t\t} else if(json[\"janus\"] === \"error\") {\n\t\t\t\t// Oops, something wrong happened\n\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\tJanus.debug(json);\n\t\t\t\tlet transaction = json[\"transaction\"];\n\t\t\t\tif(transaction) {\n\t\t\t\t\tlet reportSuccess = transactions.get(transaction);\n\t\t\t\t\tif(reportSuccess) {\n\t\t\t\t\t\treportSuccess(json);\n\t\t\t\t\t}\n\t\t\t\t\ttransactions.delete(transaction);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else if(json[\"janus\"] === \"event\") {\n\t\t\t\tJanus.debug(\"Got a plugin event on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tconst sender = json[\"sender\"];\n\t\t\t\tif(!sender) {\n\t\t\t\t\tJanus.warn(\"Missing sender...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet plugindata = json[\"plugindata\"];\n\t\t\t\tif(!plugindata) {\n\t\t\t\t\tJanus.warn(\"Missing plugindata...\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tJanus.debug(\" -- Event is coming from \" + sender + \" (\" + plugindata[\"plugin\"] + \")\");\n\t\t\t\tlet data = plugindata[\"data\"];\n\t\t\t\tJanus.debug(data);\n\t\t\t\tconst pluginHandle = pluginHandles.get(sender);\n\t\t\t\tif(!pluginHandle) {\n\t\t\t\t\tJanus.warn(\"This handle is not attached to this session\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet jsep = json[\"jsep\"];\n\t\t\t\tif(jsep) {\n\t\t\t\t\tJanus.debug(\"Handling SDP as well...\");\n\t\t\t\t\tJanus.debug(jsep);\n\t\t\t\t}\n\t\t\t\tlet callback = pluginHandle.onmessage;\n\t\t\t\tif(callback) {\n\t\t\t\t\tJanus.debug(\"Notifying application...\");\n\t\t\t\t\t// Send to callback specified when attaching plugin handle\n\t\t\t\t\tcallback(data, jsep);\n\t\t\t\t} else {\n\t\t\t\t\t// Send to generic callback (?)\n\t\t\t\t\tJanus.debug(\"No provided notification callback\");\n\t\t\t\t}\n\t\t\t} else if(json[\"janus\"] === \"timeout\") {\n\t\t\t\tJanus.error(\"Timeout on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t\tif(websockets) {\n\t\t\t\t\tws.close(3504, \"Gateway timeout\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tJanus.warn(\"Unknown message/event '\" + json[\"janus\"] + \"' on session \" + sessionId);\n\t\t\t\tJanus.debug(json);\n\t\t\t}\n\t\t}\n\n\t\t// Private helper to send keep-alive messages on WebSockets\n\t\tfunction keepAlive() {\n\t\t\tif(!server || !websockets || !connected)\n\t\t\t\treturn;\n\t\t\twsKeepaliveTimeoutId = setTimeout(keepAlive, keepAlivePeriod);\n\t\t\tlet request = { \"janus\": \"keepalive\", \"session_id\": sessionId, \"transaction\": Janus.randomString(12) };\n\t\t\tif(token)\n\t\t\t\trequest[\"token\"] = token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tws.send(JSON.stringify(request));\n\t\t}\n\n\t\t// Private method to create a session\n\t\tfunction createSession(callbacks) {\n\t\t\tlet transaction = Janus.randomString(12);\n\t\t\tlet request = { \"janus\": \"create\", \"transaction\": transaction };\n\t\t\tif(callbacks[\"reconnect\"]) {\n\t\t\t\t// We're reconnecting, claim the session\n\t\t\t\tconnected = false;\n\t\t\t\trequest[\"janus\"] = \"claim\";\n\t\t\t\trequest[\"session_id\"] = sessionId;\n\t\t\t\t// If we were using websockets, ignore the old connection\n\t\t\t\tif(ws) {\n\t\t\t\t\tws.onopen = null;\n\t\t\t\t\tws.onerror = null;\n\t\t\t\t\tws.onclose = null;\n\t\t\t\t\tif(wsKeepaliveTimeoutId) {\n\t\t\t\t\t\tclearTimeout(wsKeepaliveTimeoutId);\n\t\t\t\t\t\twsKeepaliveTimeoutId = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(token)\n\t\t\t\trequest[\"token\"] = token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tif(!server && Janus.isArray(servers)) {\n\t\t\t\t// We still need to find a working server from the list we were given\n\t\t\t\tserver = servers[serversIndex];\n\t\t\t\tif(server.indexOf(\"ws\") === 0) {\n\t\t\t\t\twebsockets = true;\n\t\t\t\t\tJanus.log(\"Server #\" + (serversIndex+1) + \": trying WebSockets to contact Janus (\" + server + \")\");\n\t\t\t\t} else {\n\t\t\t\t\twebsockets = false;\n\t\t\t\t\tJanus.log(\"Server #\" + (serversIndex+1) + \": trying REST API to contact Janus (\" + server + \")\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(websockets) {\n\t\t\t\tws = Janus.newWebSocket(server, 'janus-protocol');\n\t\t\t\twsHandlers = {\n\t\t\t\t\t'error': function() {\n\t\t\t\t\t\tJanus.error(\"Error connecting to the Janus WebSockets server... \" + server);\n\t\t\t\t\t\tif(Janus.isArray(servers) && !callbacks[\"reconnect\"]) {\n\t\t\t\t\t\t\tserversIndex++;\n\t\t\t\t\t\t\tif(serversIndex === servers.length) {\n\t\t\t\t\t\t\t\t// We tried all the servers the user gave us and they all failed\n\t\t\t\t\t\t\t\tcallbacks.error(\"Error connecting to any of the provided Janus servers: Is the server down?\");\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Let's try the next server\n\t\t\t\t\t\t\tserver = null;\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tcreateSession(callbacks);\n\t\t\t\t\t\t\t}, 200);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallbacks.error(\"Error connecting to the Janus WebSockets server: Is the server down?\");\n\t\t\t\t\t},\n\n\t\t\t\t\t'open': function() {\n\t\t\t\t\t\t// We need to be notified about the success\n\t\t\t\t\t\ttransactions.set(transaction, function(json) {\n\t\t\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\t\t\tif(json[\"janus\"] !== \"success\") {\n\t\t\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\t\t\tcallbacks.error(json[\"error\"].reason);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twsKeepaliveTimeoutId = setTimeout(keepAlive, keepAlivePeriod);\n\t\t\t\t\t\t\tconnected = true;\n\t\t\t\t\t\t\tsessionId = json[\"session_id\"] ? json[\"session_id\"] : json.data[\"id\"];\n\t\t\t\t\t\t\tif(callbacks[\"reconnect\"]) {\n\t\t\t\t\t\t\t\tJanus.log(\"Claimed session: \" + sessionId);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tJanus.log(\"Created session: \" + sessionId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tJanus.sessions.set(sessionId, that);\n\t\t\t\t\t\t\tcallbacks.success();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\t\t},\n\n\t\t\t\t\t'message': function(event) {\n\t\t\t\t\t\thandleEvent(JSON.parse(event.data));\n\t\t\t\t\t},\n\n\t\t\t\t\t'close': function() {\n\t\t\t\t\t\tif(!server || !connected) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconnected = false;\n\t\t\t\t\t\t// FIXME What if this is called when the page is closed?\n\t\t\t\t\t\tgatewayCallbacks.error(\"Lost connection to the server (is it down?)\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfor(let eventName in wsHandlers) {\n\t\t\t\t\tws.addEventListener(eventName, wsHandlers[eventName]);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"success\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\tcallbacks.error(json[\"error\"].reason);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconnected = true;\n\t\t\t\t\tsessionId = json[\"session_id\"] ? json[\"session_id\"] : json.data[\"id\"];\n\t\t\t\t\tif(callbacks[\"reconnect\"]) {\n\t\t\t\t\t\tJanus.log(\"Claimed session: \" + sessionId);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tJanus.log(\"Created session: \" + sessionId);\n\t\t\t\t\t}\n\t\t\t\t\tJanus.sessions.set(sessionId, that);\n\t\t\t\t\teventHandler();\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t\tif(Janus.isArray(servers) && !callbacks[\"reconnect\"]) {\n\t\t\t\t\t\tserversIndex++;\n\t\t\t\t\t\tif(serversIndex === servers.length) {\n\t\t\t\t\t\t\t// We tried all the servers the user gave us and they all failed\n\t\t\t\t\t\t\tcallbacks.error(\"Error connecting to any of the provided Janus servers: Is the server down?\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Let's try the next server\n\t\t\t\t\t\tserver = null;\n\t\t\t\t\t\tsetTimeout(function() { createSession(callbacks); }, 200);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(errorThrown === \"\")\n\t\t\t\t\t\tcallbacks.error(textStatus + \": Is the server down?\");\n\t\t\t\t\telse if(errorThrown && errorThrown.error)\n\t\t\t\t\t\tcallbacks.error(textStatus + \": \" + errorThrown.error.message);\n\t\t\t\t\telse\n\t\t\t\t\t\tcallbacks.error(textStatus + \": \" + errorThrown);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private method to get info on the server\n\t\tfunction getInfo(callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\t// FIXME This method triggers a success even when we fail\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tJanus.log(\"Getting info on Janus instance\");\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\tcallbacks.error(\"Is the server down? (connected=false)\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// We just need to send an \"info\" request\n\t\t\tlet transaction = Janus.randomString(12);\n\t\t\tlet request = { \"janus\": \"info\", \"transaction\": transaction };\n\t\t\tif(token)\n\t\t\t\trequest[\"token\"] = token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tif(websockets) {\n\t\t\t\ttransactions.set(transaction, function(json) {\n\t\t\t\t\tJanus.log(\"Server info:\");\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"server_info\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t}\n\t\t\t\t\tcallbacks.success(json);\n\t\t\t\t});\n\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.log(\"Server info:\");\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"server_info\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t}\n\t\t\t\t\tcallbacks.success(json);\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t\tif(errorThrown === \"\")\n\t\t\t\t\t\tcallbacks.error(textStatus + \": Is the server down?\");\n\t\t\t\t\telse\n\t\t\t\t\t\tcallbacks.error(textStatus + \": \" + errorThrown);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private method to destroy a session\n\t\tfunction destroySession(callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\t// FIXME This method triggers a success even when we fail\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tlet unload = (callbacks.unload === true);\n\t\t\tlet notifyDestroyed = true;\n\t\t\tif(typeof callbacks.notifyDestroyed !== 'undefined' && callbacks.notifyDestroyed !== null)\n\t\t\t\tnotifyDestroyed = (callbacks.notifyDestroyed === true);\n\t\t\tlet cleanupHandles = (callbacks.cleanupHandles === true);\n\t\t\tJanus.log(\"Destroying session \" + sessionId + \" (unload=\" + unload + \")\");\n\t\t\tif(!sessionId) {\n\t\t\t\tJanus.warn(\"No session to destroy\");\n\t\t\t\tcallbacks.success();\n\t\t\t\tif(notifyDestroyed)\n\t\t\t\t\tgatewayCallbacks.destroyed();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(cleanupHandles) {\n\t\t\t\tfor(const handleId of pluginHandles.keys())\n\t\t\t\t\tdestroyHandle(handleId, { noRequest: true });\n\t\t\t}\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\tsessionId = null;\n\t\t\t\tcallbacks.success();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// No need to destroy all handles first, Janus will do that itself\n\t\t\tlet request = { \"janus\": \"destroy\", \"transaction\": Janus.randomString(12) };\n\t\t\tif(token)\n\t\t\t\trequest[\"token\"] = token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tif(unload) {\n\t\t\t\t// We're unloading the page: use sendBeacon for HTTP instead,\n\t\t\t\t// or just close the WebSocket connection if we're using that\n\t\t\t\tif(websockets) {\n\t\t\t\t\tws.onclose = null;\n\t\t\t\t\tws.close();\n\t\t\t\t\tws = null;\n\t\t\t\t} else {\n\t\t\t\t\tnavigator.sendBeacon(server + \"/\" + sessionId, JSON.stringify(request));\n\t\t\t\t}\n\t\t\t\tJanus.log(\"Destroyed session:\");\n\t\t\t\tsessionId = null;\n\t\t\t\tconnected = false;\n\t\t\t\tcallbacks.success();\n\t\t\t\tif(notifyDestroyed)\n\t\t\t\t\tgatewayCallbacks.destroyed();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(websockets) {\n\t\t\t\trequest[\"session_id\"] = sessionId;\n\n\t\t\t\tlet unbindWebSocket = function() {\n\t\t\t\t\tfor(let eventName in wsHandlers) {\n\t\t\t\t\t\tws.removeEventListener(eventName, wsHandlers[eventName]);\n\t\t\t\t\t}\n\t\t\t\t\tws.removeEventListener('message', onUnbindMessage);\n\t\t\t\t\tws.removeEventListener('error', onUnbindError);\n\t\t\t\t\tif(wsKeepaliveTimeoutId) {\n\t\t\t\t\t\tclearTimeout(wsKeepaliveTimeoutId);\n\t\t\t\t\t}\n\t\t\t\t\tws.close();\n\t\t\t\t};\n\n\t\t\t\tlet onUnbindMessage = function(event){\n\t\t\t\t\tlet data = JSON.parse(event.data);\n\t\t\t\t\tif(data.session_id == request.session_id && data.transaction == request.transaction) {\n\t\t\t\t\t\tunbindWebSocket();\n\t\t\t\t\t\tcallbacks.success();\n\t\t\t\t\t\tif(notifyDestroyed)\n\t\t\t\t\t\t\tgatewayCallbacks.destroyed();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tlet onUnbindError = function() {\n\t\t\t\t\tunbindWebSocket();\n\t\t\t\t\tcallbacks.error(\"Failed to destroy the server: Is the server down?\");\n\t\t\t\t\tif(notifyDestroyed)\n\t\t\t\t\t\tgatewayCallbacks.destroyed();\n\t\t\t\t};\n\n\t\t\t\tws.addEventListener('message', onUnbindMessage);\n\t\t\t\tws.addEventListener('error', onUnbindError);\n\n\t\t\t\tif(ws.readyState === 1) {\n\t\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\t} else {\n\t\t\t\t\tonUnbindError();\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server + \"/\" + sessionId, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.log(\"Destroyed session:\");\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tsessionId = null;\n\t\t\t\t\tconnected = false;\n\t\t\t\t\tif(json[\"janus\"] !== \"success\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t}\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t\tif(notifyDestroyed)\n\t\t\t\t\t\tgatewayCallbacks.destroyed();\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t\t// Reset everything anyway\n\t\t\t\t\tsessionId = null;\n\t\t\t\t\tconnected = false;\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t\tif(notifyDestroyed)\n\t\t\t\t\t\tgatewayCallbacks.destroyed();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private method to create a plugin handle\n\t\tfunction createHandle(callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tcallbacks.dataChannelOptions = callbacks.dataChannelOptions || { ordered: true };\n\t\t\tcallbacks.consentDialog = (typeof callbacks.consentDialog == \"function\") ? callbacks.consentDialog : Janus.noop;\n\t\t\tcallbacks.connectionState = (typeof callbacks.connectionState == \"function\") ? callbacks.connectionState : Janus.noop;\n\t\t\tcallbacks.iceState = (typeof callbacks.iceState == \"function\") ? callbacks.iceState : Janus.noop;\n\t\t\tcallbacks.mediaState = (typeof callbacks.mediaState == \"function\") ? callbacks.mediaState : Janus.noop;\n\t\t\tcallbacks.webrtcState = (typeof callbacks.webrtcState == \"function\") ? callbacks.webrtcState : Janus.noop;\n\t\t\tcallbacks.slowLink = (typeof callbacks.slowLink == \"function\") ? callbacks.slowLink : Janus.noop;\n\t\t\tcallbacks.onmessage = (typeof callbacks.onmessage == \"function\") ? callbacks.onmessage : Janus.noop;\n\t\t\tcallbacks.onlocaltrack = (typeof callbacks.onlocaltrack == \"function\") ? callbacks.onlocaltrack : Janus.noop;\n\t\t\tcallbacks.onremotetrack = (typeof callbacks.onremotetrack == \"function\") ? callbacks.onremotetrack : Janus.noop;\n\t\t\tcallbacks.ondata = (typeof callbacks.ondata == \"function\") ? callbacks.ondata : Janus.noop;\n\t\t\tcallbacks.ondataopen = (typeof callbacks.ondataopen == \"function\") ? callbacks.ondataopen : Janus.noop;\n\t\t\tcallbacks.oncleanup = (typeof callbacks.oncleanup == \"function\") ? callbacks.oncleanup : Janus.noop;\n\t\t\tcallbacks.ondetached = (typeof callbacks.ondetached == \"function\") ? callbacks.ondetached : Janus.noop;\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\tcallbacks.error(\"Is the server down? (connected=false)\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet plugin = callbacks.plugin;\n\t\t\tif(!plugin) {\n\t\t\t\tJanus.error(\"Invalid plugin\");\n\t\t\t\tcallbacks.error(\"Invalid plugin\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet opaqueId = callbacks.opaqueId;\n\t\t\tlet loopIndex = callbacks.loopIndex;\n\t\t\tlet handleToken = callbacks.token ? callbacks.token : token;\n\t\t\tlet transaction = Janus.randomString(12);\n\t\t\tlet request = { \"janus\": \"attach\", \"plugin\": plugin, \"opaque_id\": opaqueId, \"loop_index\": loopIndex, \"transaction\": transaction };\n\t\t\tif(handleToken)\n\t\t\t\trequest[\"token\"] = handleToken;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tif(websockets) {\n\t\t\t\ttransactions.set(transaction, function(json) {\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"success\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\tcallbacks.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet handleId = json.data[\"id\"];\n\t\t\t\t\tJanus.log(\"Created handle: \" + handleId);\n\t\t\t\t\tlet pluginHandle =\n\t\t\t\t\t{\n\t\t\t\t\t\tsession : that,\n\t\t\t\t\t\tplugin : plugin,\n\t\t\t\t\t\tid : handleId,\n\t\t\t\t\t\ttoken : handleToken,\n\t\t\t\t\t\tdetached : false,\n\t\t\t\t\t\twebrtcStuff : {\n\t\t\t\t\t\t\tstarted : false,\n\t\t\t\t\t\t\tmyStream : null,\n\t\t\t\t\t\t\tstreamExternal : false,\n\t\t\t\t\t\t\tmySdp : null,\n\t\t\t\t\t\t\tmediaConstraints : null,\n\t\t\t\t\t\t\tpc : null,\n\t\t\t\t\t\t\tdataChannelOptions: callbacks.dataChannelOptions,\n\t\t\t\t\t\t\tdataChannel : {},\n\t\t\t\t\t\t\tdtmfSender : null,\n\t\t\t\t\t\t\ttrickle : true,\n\t\t\t\t\t\t\ticeDone : false,\n\t\t\t\t\t\t\tbitrate : {}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetId : function() { return handleId; },\n\t\t\t\t\t\tgetPlugin : function() { return plugin; },\n\t\t\t\t\t\tgetVolume : function(mid, result) { return getVolume(handleId, mid, true, result); },\n\t\t\t\t\t\tgetRemoteVolume : function(mid, result) { return getVolume(handleId, mid, true, result); },\n\t\t\t\t\t\tgetLocalVolume : function(mid, result) { return getVolume(handleId, mid, false, result); },\n\t\t\t\t\t\tisAudioMuted : function(mid) { return isMuted(handleId, mid, false); },\n\t\t\t\t\t\tmuteAudio : function(mid) { return mute(handleId, mid, false, true); },\n\t\t\t\t\t\tunmuteAudio : function(mid) { return mute(handleId, mid, false, false); },\n\t\t\t\t\t\tisVideoMuted : function(mid) { return isMuted(handleId, mid, true); },\n\t\t\t\t\t\tmuteVideo : function(mid) { return mute(handleId, mid, true, true); },\n\t\t\t\t\t\tunmuteVideo : function(mid) { return mute(handleId, mid, true, false); },\n\t\t\t\t\t\tgetBitrate : function(mid) { return getBitrate(handleId, mid); },\n\t\t\t\t\t\tsetMaxBitrate : function(mid, bitrate) { return setBitrate(handleId, mid, bitrate); },\n\t\t\t\t\t\tsend : function(callbacks) { sendMessage(handleId, callbacks); },\n\t\t\t\t\t\tdata : function(callbacks) { sendData(handleId, callbacks); },\n\t\t\t\t\t\tdtmf : function(callbacks) { sendDtmf(handleId, callbacks); },\n\t\t\t\t\t\tconsentDialog : callbacks.consentDialog,\n\t\t\t\t\t\tconnectionState : callbacks.connectionState,\n\t\t\t\t\t\ticeState : callbacks.iceState,\n\t\t\t\t\t\tmediaState : callbacks.mediaState,\n\t\t\t\t\t\twebrtcState : callbacks.webrtcState,\n\t\t\t\t\t\tslowLink : callbacks.slowLink,\n\t\t\t\t\t\tonmessage : callbacks.onmessage,\n\t\t\t\t\t\tcreateOffer : function(callbacks) { prepareWebrtc(handleId, true, callbacks); },\n\t\t\t\t\t\tcreateAnswer : function(callbacks) { prepareWebrtc(handleId, false, callbacks); },\n\t\t\t\t\t\thandleRemoteJsep : function(callbacks) { prepareWebrtcPeer(handleId, callbacks); },\n\t\t\t\t\t\treplaceTracks : function(callbacks) { replaceTracks(handleId, callbacks); },\n\t\t\t\t\t\tgetLocalTracks : function() { return getLocalTracks(handleId); },\n\t\t\t\t\t\tgetRemoteTracks : function() { return getRemoteTracks(handleId); },\n\t\t\t\t\t\tonlocaltrack : callbacks.onlocaltrack,\n\t\t\t\t\t\tonremotetrack : callbacks.onremotetrack,\n\t\t\t\t\t\tondata : callbacks.ondata,\n\t\t\t\t\t\tondataopen : callbacks.ondataopen,\n\t\t\t\t\t\toncleanup : callbacks.oncleanup,\n\t\t\t\t\t\tondetached : callbacks.ondetached,\n\t\t\t\t\t\thangup : function(sendRequest) { cleanupWebrtc(handleId, sendRequest === true); },\n\t\t\t\t\t\tdetach : function(callbacks) { destroyHandle(handleId, callbacks); }\n\t\t\t\t\t};\n\t\t\t\t\tpluginHandles.set(handleId, pluginHandle);\n\t\t\t\t\tcallbacks.success(pluginHandle);\n\t\t\t\t});\n\t\t\t\trequest[\"session_id\"] = sessionId;\n\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server + \"/\" + sessionId, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"success\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\tcallbacks.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tlet handleId = json.data[\"id\"];\n\t\t\t\t\tJanus.log(\"Created handle: \" + handleId);\n\t\t\t\t\tlet pluginHandle =\n\t\t\t\t\t{\n\t\t\t\t\t\tsession : that,\n\t\t\t\t\t\tplugin : plugin,\n\t\t\t\t\t\tid : handleId,\n\t\t\t\t\t\ttoken : handleToken,\n\t\t\t\t\t\tdetached : false,\n\t\t\t\t\t\twebrtcStuff : {\n\t\t\t\t\t\t\tstarted : false,\n\t\t\t\t\t\t\tmyStream : null,\n\t\t\t\t\t\t\tstreamExternal : false,\n\t\t\t\t\t\t\tmySdp : null,\n\t\t\t\t\t\t\tmediaConstraints : null,\n\t\t\t\t\t\t\tpc : null,\n\t\t\t\t\t\t\tdataChannelOptions: callbacks.dataChannelOptions,\n\t\t\t\t\t\t\tdataChannel : {},\n\t\t\t\t\t\t\tdtmfSender : null,\n\t\t\t\t\t\t\ttrickle : true,\n\t\t\t\t\t\t\ticeDone : false,\n\t\t\t\t\t\t\tbitrate: {}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetId : function() { return handleId; },\n\t\t\t\t\t\tgetPlugin : function() { return plugin; },\n\t\t\t\t\t\tgetVolume : function(mid, result) { return getVolume(handleId, mid, true, result); },\n\t\t\t\t\t\tgetRemoteVolume : function(mid, result) { return getVolume(handleId, mid, true, result); },\n\t\t\t\t\t\tgetLocalVolume : function(mid, result) { return getVolume(handleId, mid, false, result); },\n\t\t\t\t\t\tisAudioMuted : function(mid) { return isMuted(handleId, mid, false); },\n\t\t\t\t\t\tmuteAudio : function(mid) { return mute(handleId, mid, false, true); },\n\t\t\t\t\t\tunmuteAudio : function(mid) { return mute(handleId, mid, false, false); },\n\t\t\t\t\t\tisVideoMuted : function(mid) { return isMuted(handleId, mid, true); },\n\t\t\t\t\t\tmuteVideo : function(mid) { return mute(handleId, mid, true, true); },\n\t\t\t\t\t\tunmuteVideo : function(mid) { return mute(handleId, mid, true, false); },\n\t\t\t\t\t\tgetBitrate : function(mid) { return getBitrate(handleId, mid); },\n\t\t\t\t\t\tsetMaxBitrate : function(mid, bitrate) { return setBitrate(handleId, mid, bitrate); },\n\t\t\t\t\t\tsend : function(callbacks) { sendMessage(handleId, callbacks); },\n\t\t\t\t\t\tdata : function(callbacks) { sendData(handleId, callbacks); },\n\t\t\t\t\t\tdtmf : function(callbacks) { sendDtmf(handleId, callbacks); },\n\t\t\t\t\t\tconsentDialog : callbacks.consentDialog,\n\t\t\t\t\t\tconnectionState : callbacks.connectionState,\n\t\t\t\t\t\ticeState : callbacks.iceState,\n\t\t\t\t\t\tmediaState : callbacks.mediaState,\n\t\t\t\t\t\twebrtcState : callbacks.webrtcState,\n\t\t\t\t\t\tslowLink : callbacks.slowLink,\n\t\t\t\t\t\tonmessage : callbacks.onmessage,\n\t\t\t\t\t\tcreateOffer : function(callbacks) { prepareWebrtc(handleId, true, callbacks); },\n\t\t\t\t\t\tcreateAnswer : function(callbacks) { prepareWebrtc(handleId, false, callbacks); },\n\t\t\t\t\t\thandleRemoteJsep : function(callbacks) { prepareWebrtcPeer(handleId, callbacks); },\n\t\t\t\t\t\treplaceTracks : function(callbacks) { replaceTracks(handleId, callbacks); },\n\t\t\t\t\t\tgetLocalTracks : function() { return getLocalTracks(handleId); },\n\t\t\t\t\t\tgetRemoteTracks : function() { return getRemoteTracks(handleId); },\n\t\t\t\t\t\tonlocaltrack : callbacks.onlocaltrack,\n\t\t\t\t\t\tonremotetrack : callbacks.onremotetrack,\n\t\t\t\t\t\tondata : callbacks.ondata,\n\t\t\t\t\t\tondataopen : callbacks.ondataopen,\n\t\t\t\t\t\toncleanup : callbacks.oncleanup,\n\t\t\t\t\t\tondetached : callbacks.ondetached,\n\t\t\t\t\t\thangup : function(sendRequest) { cleanupWebrtc(handleId, sendRequest === true); },\n\t\t\t\t\t\tdetach : function(callbacks) { destroyHandle(handleId, callbacks); }\n\t\t\t\t\t};\n\t\t\t\t\tpluginHandles.set(handleId, pluginHandle);\n\t\t\t\t\tcallbacks.success(pluginHandle);\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t\tif(errorThrown === \"\")\n\t\t\t\t\t\tcallbacks.error(textStatus + \": Is the server down?\");\n\t\t\t\t\telse\n\t\t\t\t\t\tcallbacks.error(textStatus + \": \" + errorThrown);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private method to send a message\n\t\tfunction sendMessage(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\tcallbacks.error(\"Is the server down? (connected=false)\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tcallbacks.error(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet message = callbacks.message;\n\t\t\tlet jsep = callbacks.jsep;\n\t\t\tlet transaction = Janus.randomString(12);\n\t\t\tlet request = { \"janus\": \"message\", \"body\": message, \"transaction\": transaction };\n\t\t\tif(pluginHandle.token)\n\t\t\t\trequest[\"token\"] = pluginHandle.token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tif(jsep) {\n\t\t\t\trequest.jsep = {\n\t\t\t\t\ttype: jsep.type,\n\t\t\t\t\tsdp: jsep.sdp\n\t\t\t\t};\n\t\t\t\tif(jsep.e2ee)\n\t\t\t\t\trequest.jsep.e2ee = true;\n\t\t\t\tif(jsep.rid_order === \"hml\" || jsep.rid_order === \"lmh\")\n\t\t\t\t\trequest.jsep.rid_order = jsep.rid_order;\n\t\t\t\tif(jsep.force_relay)\n\t\t\t\t\trequest.jsep.force_relay = true;\n\t\t\t\t// Check if there's SVC video streams to tell Janus about\n\t\t\t\tlet svc = null;\n\t\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\t\tif(config.pc) {\n\t\t\t\t\tlet transceivers = config.pc.getTransceivers();\n\t\t\t\t\tif(transceivers && transceivers.length > 0) {\n\t\t\t\t\t\tfor(let mindex in transceivers) {\n\t\t\t\t\t\t\tlet tr = transceivers[mindex];\n\t\t\t\t\t\t\tif(tr && tr.sender && tr.sender.track && tr.sender.track.kind === 'video') {\n\t\t\t\t\t\t\t\tlet params = tr.sender.getParameters();\n\t\t\t\t\t\t\t\tif(params && params.encodings && params.encodings[0] &&\n\t\t\t\t\t\t\t\t\tparams.encodings[0].scalabilityMode) {\n\t\t\t\t\t\t\t\t\t// This video stream uses SVC\n\t\t\t\t\t\t\t\t\tif(!svc)\n\t\t\t\t\t\t\t\t\t\tsvc = [];\n\t\t\t\t\t\t\t\t\tsvc.push({\n\t\t\t\t\t\t\t\t\t\tmindex: parseInt(mindex),\n\t\t\t\t\t\t\t\t\t\tmid: tr.mid,\n\t\t\t\t\t\t\t\t\t\tsvc: params.encodings[0].scalabilityMode\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(svc)\n\t\t\t\t\trequest.jsep.svc = svc;\n\t\t\t}\n\t\t\tJanus.debug(\"Sending message to plugin (handle=\" + handleId + \"):\");\n\t\t\tJanus.debug(request);\n\t\t\tif(websockets) {\n\t\t\t\trequest[\"session_id\"] = sessionId;\n\t\t\t\trequest[\"handle_id\"] = handleId;\n\t\t\t\ttransactions.set(transaction, function(json) {\n\t\t\t\t\tJanus.debug(\"Message sent!\");\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] === \"success\") {\n\t\t\t\t\t\t// We got a success, must have been a synchronous transaction\n\t\t\t\t\t\tlet plugindata = json[\"plugindata\"];\n\t\t\t\t\t\tif(!plugindata) {\n\t\t\t\t\t\t\tJanus.warn(\"Request succeeded, but missing plugindata...\");\n\t\t\t\t\t\t\tcallbacks.success();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tJanus.log(\"Synchronous transaction successful (\" + plugindata[\"plugin\"] + \")\");\n\t\t\t\t\t\tlet data = plugindata[\"data\"];\n\t\t\t\t\t\tJanus.debug(data);\n\t\t\t\t\t\tcallbacks.success(data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if(json[\"janus\"] !== \"ack\") {\n\t\t\t\t\t\t// Not a success and not an ack, must be an error\n\t\t\t\t\t\tif(json[\"error\"]) {\n\t\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\t\tcallbacks.error(json[\"error\"].code + \" \" + json[\"error\"].reason);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tJanus.error(\"Unknown error\");\t// FIXME\n\t\t\t\t\t\t\tcallbacks.error(\"Unknown error\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// If we got here, the plugin decided to handle the request asynchronously\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t});\n\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server + \"/\" + sessionId + \"/\" + handleId, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.debug(\"Message sent!\");\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] === \"success\") {\n\t\t\t\t\t\t// We got a success, must have been a synchronous transaction\n\t\t\t\t\t\tlet plugindata = json[\"plugindata\"];\n\t\t\t\t\t\tif(!plugindata) {\n\t\t\t\t\t\t\tJanus.warn(\"Request succeeded, but missing plugindata...\");\n\t\t\t\t\t\t\tcallbacks.success();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tJanus.log(\"Synchronous transaction successful (\" + plugindata[\"plugin\"] + \")\");\n\t\t\t\t\t\tlet data = plugindata[\"data\"];\n\t\t\t\t\t\tJanus.debug(data);\n\t\t\t\t\t\tcallbacks.success(data);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if(json[\"janus\"] !== \"ack\") {\n\t\t\t\t\t\t// Not a success and not an ack, must be an error\n\t\t\t\t\t\tif(json[\"error\"]) {\n\t\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\t\tcallbacks.error(json[\"error\"].code + \" \" + json[\"error\"].reason);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tJanus.error(\"Unknown error\");\t// FIXME\n\t\t\t\t\t\t\tcallbacks.error(\"Unknown error\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// If we got here, the plugin decided to handle the request asynchronously\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t\tcallbacks.error(textStatus + \": \" + errorThrown);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private method to send a trickle candidate\n\t\tfunction sendTrickleCandidate(handleId, candidate) {\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet request = { \"janus\": \"trickle\", \"candidate\": candidate, \"transaction\": Janus.randomString(12) };\n\t\t\tif(pluginHandle.token)\n\t\t\t\trequest[\"token\"] = pluginHandle.token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tJanus.vdebug(\"Sending trickle candidate (handle=\" + handleId + \"):\");\n\t\t\tJanus.vdebug(request);\n\t\t\tif(websockets) {\n\t\t\t\trequest[\"session_id\"] = sessionId;\n\t\t\t\trequest[\"handle_id\"] = handleId;\n\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server + \"/\" + sessionId + \"/\" + handleId, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.vdebug(\"Candidate sent!\");\n\t\t\t\t\tJanus.vdebug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"ack\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Private method to create a data channel\n\t\tfunction createDataChannel(handleId, dclabel, dcprotocol, incoming, pendingData) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn(\"Invalid PeerConnection\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet onDataChannelMessage = function(event) {\n\t\t\t\tJanus.log('Received message on data channel:', event);\n\t\t\t\tlet label = event.target.label;\n\t\t\t\tpluginHandle.ondata(event.data, label);\n\t\t\t};\n\t\t\tlet onDataChannelStateChange = function(event) {\n\t\t\t\tJanus.log('Received state change on data channel:', event);\n\t\t\t\tlet label = event.target.label;\n\t\t\t\tlet protocol = event.target.protocol;\n\t\t\t\tlet dcState = config.dataChannel[label] ? config.dataChannel[label].readyState : \"null\";\n\t\t\t\tJanus.log('State change on <' + label + '> data channel: ' + dcState);\n\t\t\t\tif(dcState === 'open') {\n\t\t\t\t\t// Any pending messages to send?\n\t\t\t\t\tif(config.dataChannel[label].pending && config.dataChannel[label].pending.length > 0) {\n\t\t\t\t\t\tJanus.log(\"Sending pending messages on <\" + label + \">:\", config.dataChannel[label].pending.length);\n\t\t\t\t\t\tfor(let data of config.dataChannel[label].pending) {\n\t\t\t\t\t\t\tJanus.log(\"Sending data on data channel <\" + label + \">\");\n\t\t\t\t\t\t\tJanus.debug(data);\n\t\t\t\t\t\t\tconfig.dataChannel[label].send(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconfig.dataChannel[label].pending = [];\n\t\t\t\t\t}\n\t\t\t\t\t// Notify the open data channel\n\t\t\t\t\tpluginHandle.ondataopen(label, protocol);\n\t\t\t\t}\n\t\t\t};\n\t\t\tlet onDataChannelError = function(error) {\n\t\t\t\tJanus.error('Got error on data channel:', error);\n\t\t\t\t// TODO\n\t\t\t};\n\t\t\tif(!incoming) {\n\t\t\t\t// FIXME Add options (ordered, maxRetransmits, etc.)\n\t\t\t\tlet dcoptions = config.dataChannelOptions;\n\t\t\t\tif(dcprotocol)\n\t\t\t\t\tdcoptions.protocol = dcprotocol;\n\t\t\t\tconfig.dataChannel[dclabel] = config.pc.createDataChannel(dclabel, dcoptions);\n\t\t\t} else {\n\t\t\t\t// The channel was created by Janus\n\t\t\t\tconfig.dataChannel[dclabel] = incoming;\n\t\t\t}\n\t\t\tconfig.dataChannel[dclabel].onmessage = onDataChannelMessage;\n\t\t\tconfig.dataChannel[dclabel].onopen = onDataChannelStateChange;\n\t\t\tconfig.dataChannel[dclabel].onclose = onDataChannelStateChange;\n\t\t\tconfig.dataChannel[dclabel].onerror = onDataChannelError;\n\t\t\tconfig.dataChannel[dclabel].pending = [];\n\t\t\tif(pendingData)\n\t\t\t\tconfig.dataChannel[dclabel].pending.push(pendingData);\n\t\t}\n\n\t\t// Private method to send a data channel message\n\t\tfunction sendData(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tcallbacks.error(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tlet data = callbacks.text || callbacks.data;\n\t\t\tif(!data) {\n\t\t\t\tJanus.warn(\"Invalid data\");\n\t\t\t\tcallbacks.error(\"Invalid data\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet label = callbacks.label ? callbacks.label : Janus.dataChanDefaultLabel;\n\t\t\tif(!config.dataChannel[label]) {\n\t\t\t\t// Create new data channel and wait for it to open\n\t\t\t\tcreateDataChannel(handleId, label, callbacks.protocol, false, data, callbacks.protocol);\n\t\t\t\tcallbacks.success();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(config.dataChannel[label].readyState !== \"open\") {\n\t\t\t\tconfig.dataChannel[label].pending.push(data);\n\t\t\t\tcallbacks.success();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.log(\"Sending data on data channel <\" + label + \">\");\n\t\t\tJanus.debug(data);\n\t\t\tconfig.dataChannel[label].send(data);\n\t\t\tcallbacks.success();\n\t\t}\n\n\t\t// Private method to send a DTMF tone\n\t\tfunction sendDtmf(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tcallbacks.error(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.dtmfSender) {\n\t\t\t\t// Create the DTMF sender the proper way, if possible\n\t\t\t\tif(config.pc) {\n\t\t\t\t\tlet senders = config.pc.getSenders();\n\t\t\t\t\tlet audioSender = senders.find(function(sender) {\n\t\t\t\t\t\treturn sender.track && sender.track.kind === 'audio';\n\t\t\t\t\t});\n\t\t\t\t\tif(!audioSender) {\n\t\t\t\t\t\tJanus.warn(\"Invalid DTMF configuration (no audio track)\");\n\t\t\t\t\t\tcallbacks.error(\"Invalid DTMF configuration (no audio track)\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconfig.dtmfSender = audioSender.dtmf;\n\t\t\t\t\tif(config.dtmfSender) {\n\t\t\t\t\t\tJanus.log(\"Created DTMF Sender\");\n\t\t\t\t\t\tconfig.dtmfSender.ontonechange = function(tone) { Janus.debug(\"Sent DTMF tone: \" + tone.tone); };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!config.dtmfSender) {\n\t\t\t\t\tJanus.warn(\"Invalid DTMF configuration\");\n\t\t\t\t\tcallbacks.error(\"Invalid DTMF configuration\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet dtmf = callbacks.dtmf;\n\t\t\tif(!dtmf) {\n\t\t\t\tJanus.warn(\"Invalid DTMF parameters\");\n\t\t\t\tcallbacks.error(\"Invalid DTMF parameters\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet tones = dtmf.tones;\n\t\t\tif(!tones) {\n\t\t\t\tJanus.warn(\"Invalid DTMF string\");\n\t\t\t\tcallbacks.error(\"Invalid DTMF string\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet duration = (typeof dtmf.duration === 'number') ? dtmf.duration : 500; // We choose 500ms as the default duration for a tone\n\t\t\tlet gap = (typeof dtmf.gap === 'number') ? dtmf.gap : 50; // We choose 50ms as the default gap between tones\n\t\t\tJanus.debug(\"Sending DTMF string \" + tones + \" (duration \" + duration + \"ms, gap \" + gap + \"ms)\");\n\t\t\tconfig.dtmfSender.insertDTMF(tones, duration, gap);\n\t\t\tcallbacks.success();\n\t\t}\n\n\t\t// Private method to destroy a plugin handle\n\t\tfunction destroyHandle(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tlet noRequest = (callbacks.noRequest === true);\n\t\t\tJanus.log(\"Destroying handle \" + handleId + \" (only-locally=\" + noRequest + \")\");\n\t\t\tcleanupWebrtc(handleId);\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || pluginHandle.detached) {\n\t\t\t\t// Plugin was already detached by Janus, calling detach again will return a handle not found error, so just exit here\n\t\t\t\tpluginHandles.delete(handleId);\n\t\t\t\tcallbacks.success();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpluginHandle.detached = true;\n\t\t\tif(noRequest) {\n\t\t\t\t// We're only removing the handle locally\n\t\t\t\tpluginHandles.delete(handleId);\n\t\t\t\tcallbacks.success();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!connected) {\n\t\t\t\tJanus.warn(\"Is the server down? (connected=false)\");\n\t\t\t\tcallbacks.error(\"Is the server down? (connected=false)\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet request = { \"janus\": \"detach\", \"transaction\": Janus.randomString(12) };\n\t\t\tif(pluginHandle.token)\n\t\t\t\trequest[\"token\"] = pluginHandle.token;\n\t\t\tif(apisecret)\n\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\tif(websockets) {\n\t\t\t\trequest[\"session_id\"] = sessionId;\n\t\t\t\trequest[\"handle_id\"] = handleId;\n\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\tpluginHandles.delete(handleId);\n\t\t\t\tcallbacks.success();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tJanus.httpAPICall(server + \"/\" + sessionId + \"/\" + handleId, {\n\t\t\t\tverb: 'POST',\n\t\t\t\twithCredentials: withCredentials,\n\t\t\t\tbody: request,\n\t\t\t\tsuccess: function(json) {\n\t\t\t\t\tJanus.log(\"Destroyed handle:\");\n\t\t\t\t\tJanus.debug(json);\n\t\t\t\t\tif(json[\"janus\"] !== \"success\") {\n\t\t\t\t\t\tJanus.error(\"Ooops: \" + json[\"error\"].code + \" \" + json[\"error\"].reason);\t// FIXME\n\t\t\t\t\t}\n\t\t\t\t\tpluginHandles.delete(handleId);\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t},\n\t\t\t\terror: function(textStatus, errorThrown) {\n\t\t\t\t\tJanus.error(textStatus + \":\", errorThrown);\t// FIXME\n\t\t\t\t\t// We cleanup anyway\n\t\t\t\t\tpluginHandles.delete(handleId);\n\t\t\t\t\tcallbacks.success();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// WebRTC stuff\n\t\t// Helper function to create a new PeerConnection, if we need one\n\t\tfunction createPeerconnectionIfNeeded(handleId, callbacks) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tthrow \"Invalid handle\";\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(config.pc) {\n\t\t\t\t// Nothing to do, we have a PeerConnection already\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet pc_config = {\n\t\t\t\ticeServers: iceServers,\n\t\t\t\ticeTransportPolicy: iceTransportPolicy,\n\t\t\t\tbundlePolicy: bundlePolicy\n\t\t\t};\n\t\t\tpc_config.sdpSemantics = 'unified-plan';\n\t\t\t// Check if a sender or receiver transform has been provided\n\t\t\tlet insertableStreams = false;\n\t\t\tif(callbacks.tracks) {\n\t\t\t\tfor(let track of callbacks.tracks) {\n\t\t\t\t\tif(track.transforms && (track.transforms.sender || track.transforms.receiver)) {\n\t\t\t\t\t\tinsertableStreams = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(callbacks.externalEncryption) {\n\t\t\t\tinsertableStreams = true;\n\t\t\t\tconfig.externalEncryption = true;\n\t\t\t}\n\t\t\tif(RTCRtpSender && (RTCRtpSender.prototype.createEncodedStreams ||\n\t\t\t\t(RTCRtpSender.prototype.createEncodedAudioStreams &&\n\t\t\t\tRTCRtpSender.prototype.createEncodedVideoStreams)) && insertableStreams) {\n\t\t\t\tconfig.insertableStreams = true;\n\t\t\t\tpc_config.forceEncodedAudioInsertableStreams = true;\n\t\t\t\tpc_config.forceEncodedVideoInsertableStreams = true;\n\t\t\t\tpc_config.encodedInsertableStreams = true;\n\t\t\t}\n\t\t\tJanus.log('Creating PeerConnection');\n\t\t\tconfig.pc = new RTCPeerConnection(pc_config);\n\t\t\tJanus.debug(config.pc);\n\t\t\tif(config.pc.getStats) {\t// FIXME\n\t\t\t\tconfig.volume = {};\n\t\t\t\tconfig.bitrate.value = '0 kbits/sec';\n\t\t\t}\n\t\t\tJanus.log('Preparing local SDP and gathering candidates (trickle=' + config.trickle + ')');\n\t\t\tconfig.pc.onconnectionstatechange = function() {\n\t\t\t\tif(config.pc)\n\t\t\t\t\tpluginHandle.connectionState(config.pc.connectionState);\n\t\t\t};\n\t\t\tconfig.pc.oniceconnectionstatechange = function() {\n\t\t\t\tif(config.pc)\n\t\t\t\t\tpluginHandle.iceState(config.pc.iceConnectionState);\n\t\t\t};\n\t\t\tconfig.pc.onicecandidate = function(event) {\n\t\t\t\tif(!event.candidate || (event.candidate.candidate && event.candidate.candidate.indexOf('endOfCandidates') > 0)) {\n\t\t\t\t\tJanus.log('End of candidates.');\n\t\t\t\t\tconfig.iceDone = true;\n\t\t\t\t\tif(config.trickle === true) {\n\t\t\t\t\t\t// Notify end of candidates\n\t\t\t\t\t\tsendTrickleCandidate(handleId, { completed : true });\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No trickle, time to send the complete SDP (including all candidates)\n\t\t\t\t\t\tsendSDP(handleId, callbacks);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// JSON.stringify doesn't work on some WebRTC objects anymore\n\t\t\t\t\t// See https://code.google.com/p/chromium/issues/detail?id=467366\n\t\t\t\t\tlet candidate = {\n\t\t\t\t\t\tcandidate: event.candidate.candidate,\n\t\t\t\t\t\tsdpMid: event.candidate.sdpMid,\n\t\t\t\t\t\tsdpMLineIndex: event.candidate.sdpMLineIndex\n\t\t\t\t\t};\n\t\t\t\t\tif(config.trickle === true) {\n\t\t\t\t\t\t// Send candidate\n\t\t\t\t\t\tsendTrickleCandidate(handleId, candidate);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconfig.pc.ontrack = function(event) {\n\t\t\t\tJanus.log('Handling Remote Track', event);\n\t\t\t\tif(!event.streams)\n\t\t\t\t\treturn;\n\t\t\t\tif(!event.track)\n\t\t\t\t\treturn;\n\t\t\t\t// Notify about the new track event\n\t\t\t\tlet mid = event.transceiver ? event.transceiver.mid : event.track.id;\n\t\t\t\ttry {\n\t\t\t\t\tif(event.transceiver && event.transceiver.mid && event.track.id) {\n\t\t\t\t\t\t// Keep track of the mapping between track ID and mid, since\n\t\t\t\t\t\t// when a track is removed the transceiver may be gone already\n\t\t\t\t\t\tif(!pluginHandle.mids)\n\t\t\t\t\t\t\tpluginHandle.mids = {};\n\t\t\t\t\t\tpluginHandle.mids[event.track.id] = event.transceiver.mid;\n\t\t\t\t\t}\n\t\t\t\t\tpluginHandle.onremotetrack(event.track, mid, true, { reason: 'created' });\n\t\t\t\t} catch(e) {\n\t\t\t\t\tJanus.error(\"Error calling onremotetrack\", e);\n\t\t\t\t}\n\t\t\t\tif(event.track.onended)\n\t\t\t\t\treturn;\n\t\t\t\tlet trackMutedTimeoutId = null;\n\t\t\t\tJanus.log('Adding onended callback to track:', event.track);\n\t\t\t\tevent.track.onended = function(ev) {\n\t\t\t\t\tJanus.log('Remote track removed:', ev);\n\t\t\t\t\tclearTimeout(trackMutedTimeoutId);\n\t\t\t\t\t// Notify the application\n\t\t\t\t\tlet transceivers = config.pc ? config.pc.getTransceivers() : null;\n\t\t\t\t\tlet transceiver = transceivers ? transceivers.find(\n\t\t\t\t\t\tt => t.receiver.track === ev.target) : null;\n\t\t\t\t\tlet mid = transceiver ? transceiver.mid : ev.target.id;\n\t\t\t\t\tif(mid === ev.target.id && pluginHandle.mids && pluginHandle.mids[event.track.id])\n\t\t\t\t\t\tmid = pluginHandle.mids[event.track.id];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpluginHandle.onremotetrack(ev.target, mid, false, { reason: 'ended' });\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\tJanus.error(\"Error calling onremotetrack on removal\", e);\n\t\t\t\t\t}\n\t\t\t\t\tdelete pluginHandle.mids[event.track.id];\n\t\t\t\t};\n\t\t\t\tevent.track.onmute = function(ev) {\n\t\t\t\t\tJanus.log('Remote track muted:', ev);\n\t\t\t\t\tif(!trackMutedTimeoutId) {\n\t\t\t\t\t\ttrackMutedTimeoutId = setTimeout(function() {\n\t\t\t\t\t\t\tJanus.log('Removing remote track');\n\t\t\t\t\t\t\t// Notify the application the track is gone\n\t\t\t\t\t\t\tlet transceivers = config.pc ? config.pc.getTransceivers() : null;\n\t\t\t\t\t\t\tlet transceiver = transceivers ? transceivers.find(\n\t\t\t\t\t\t\t\tt => t.receiver.track === ev.target) : null;\n\t\t\t\t\t\t\tlet mid = transceiver ? transceiver.mid : ev.target.id;\n\t\t\t\t\t\t\tif(mid === ev.target.id && pluginHandle.mids && pluginHandle.mids[event.track.id])\n\t\t\t\t\t\t\t\tmid = pluginHandle.mids[event.track.id];\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tpluginHandle.onremotetrack(ev.target, mid, false, { reason: 'mute' } );\n\t\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\t\tJanus.error(\"Error calling onremotetrack on mute\", e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrackMutedTimeoutId = null;\n\t\t\t\t\t\t\t// Chrome seems to raise mute events only at multiples of 834ms;\n\t\t\t\t\t\t\t// we set the timeout to three times this value (rounded to 840ms)\n\t\t\t\t\t\t}, 3 * 840);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tevent.track.onunmute = function(ev) {\n\t\t\t\t\tJanus.log('Remote track flowing again:', ev);\n\t\t\t\t\tif(trackMutedTimeoutId != null) {\n\t\t\t\t\t\tclearTimeout(trackMutedTimeoutId);\n\t\t\t\t\t\ttrackMutedTimeoutId = null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Notify the application the track is back\n\t\t\t\t\t\t\tlet transceivers = config.pc ? config.pc.getTransceivers() : null;\n\t\t\t\t\t\t\tlet transceiver = transceivers ? transceivers.find(\n\t\t\t\t\t\t\t\tt => t.receiver.track === ev.target) : null;\n\t\t\t\t\t\t\tlet mid = transceiver ? transceiver.mid : ev.target.id;\n\t\t\t\t\t\t\tpluginHandle.onremotetrack(ev.target, mid, true, { reason: 'unmute' });\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\tJanus.error(\"Error calling onremotetrack on unmute\", e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\n\t\t// Helper function used when creating either an offer or answer: it\n\t\t// prepares what needs to be prepared, including creating a new\n\t\t// PeerConnection (if needed) and updating the tracks configuration,\n\t\t// before invoking the function to actually generate the offer/answer\n\t\tasync function prepareWebrtc(handleId, offer, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : webrtcError;\n\t\t\tlet jsep = callbacks.jsep;\n\t\t\tif(offer && jsep) {\n\t\t\t\tJanus.error(\"Provided a JSEP to a createOffer\");\n\t\t\t\tcallbacks.error(\"Provided a JSEP to a createOffer\");\n\t\t\t\treturn;\n\t\t\t} else if(!offer && (!jsep || !jsep.type || !jsep.sdp)) {\n\t\t\t\tJanus.error(\"A valid JSEP is required for createAnswer\");\n\t\t\t\tcallbacks.error(\"A valid JSEP is required for createAnswer\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// If the deprecated media was provided instead of tracks, translate it\n\t\t\tif(callbacks.media && !callbacks.tracks) {\n\t\t\t\tcallbacks.tracks = Janus.mediaToTracks(callbacks.media);\n\t\t\t\tif(callbacks.simulcast === true || callbacks.simulcast2 === true || callbacks.svc) {\n\t\t\t\t\t// Find the video track and add simulcast/SVC info there\n\t\t\t\t\tfor(let track of callbacks.tracks) {\n\t\t\t\t\t\tif(track.type === 'video') {\n\t\t\t\t\t\t\tif(callbacks.simulcast === true || callbacks.simulcast2 === true)\n\t\t\t\t\t\t\t\ttrack.simulcast = true;\n\t\t\t\t\t\t\telse if(callbacks.svc)\n\t\t\t\t\t\t\t\ttrack.svc = callbacks.svc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tJanus.warn('Deprecated media object passed, use tracks instead. Automatically translated to:', callbacks.tracks);\n\t\t\t}\n\t\t\t// Check that callbacks.array is a valid array\n\t\t\tif(callbacks.tracks && !Array.isArray(callbacks.tracks)) {\n\t\t\t\tJanus.error(\"Tracks must be an array\");\n\t\t\t\tcallbacks.error(\"Tracks must be an array\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Get the plugin handle\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tcallbacks.error(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tconfig.trickle = isTrickleEnabled(callbacks.trickle);\n\t\t\ttry {\n\t\t\t\t// Create a PeerConnection, if needed\n\t\t\t\tcreatePeerconnectionIfNeeded(handleId, callbacks);\n\t\t\t\tif(offer) {\n\t\t\t\t\t// Capture devices and setup tracks, if needed\n\t\t\t\t\tawait captureDevices(handleId, callbacks);\n\t\t\t\t}\n\t\t\t\t// Create offer or answer now (depending on the context)\n\t\t\t\tif(!jsep) {\n\t\t\t\t\tlet offer = await createOffer(handleId, callbacks);\n\t\t\t\t\tcallbacks.success(offer);\n\t\t\t\t} else {\n\t\t\t\t\tawait config.pc.setRemoteDescription(jsep);\n\t\t\t\t\tJanus.log(\"Remote description accepted!\");\n\t\t\t\t\tconfig.remoteSdp = jsep.sdp;\n\t\t\t\t\t// Any trickle candidate we cached?\n\t\t\t\t\tif(config.candidates && config.candidates.length > 0) {\n\t\t\t\t\t\tfor(let i=0; i<config.candidates.length; i++) {\n\t\t\t\t\t\t\tlet candidate = config.candidates[i];\n\t\t\t\t\t\t\tJanus.debug(\"Adding remote candidate:\", candidate);\n\t\t\t\t\t\t\tif(!candidate || candidate.completed === true) {\n\t\t\t\t\t\t\t\t// end-of-candidates\n\t\t\t\t\t\t\t\tconfig.pc.addIceCandidate(Janus.endOfCandidates);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// New candidate\n\t\t\t\t\t\t\t\tconfig.pc.addIceCandidate(candidate);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconfig.candidates = [];\n\t\t\t\t\t}\n\t\t\t\t\t// Capture devices and setup tracks, if needed\n\t\t\t\t\tawait captureDevices(handleId, callbacks);\n\t\t\t\t\t// Create the answer now\n\t\t\t\t\tlet answer = await createAnswer(handleId, callbacks);\n\t\t\t\t\tcallbacks.success(answer);\n\t\t\t\t}\n\t\t\t} catch(err) {\n\t\t\t\tJanus.error(err);\n\t\t\t\tcallbacks.error(err);\n\t\t\t}\n\t\t}\n\n\t\tfunction prepareWebrtcPeer(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : webrtcError;\n\t\t\tcallbacks.customizeSdp = (typeof callbacks.customizeSdp == \"function\") ? callbacks.customizeSdp : Janus.noop;\n\t\t\tlet jsep = callbacks.jsep;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tcallbacks.error(\"Invalid handle\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(jsep) {\n\t\t\t\tif(!config.pc) {\n\t\t\t\t\tJanus.warn(\"Wait, no PeerConnection?? if this is an answer, use createAnswer and not handleRemoteJsep\");\n\t\t\t\t\tcallbacks.error(\"No PeerConnection: if this is an answer, use createAnswer and not handleRemoteJsep\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcallbacks.customizeSdp(jsep);\n\t\t\t\tconfig.pc.setRemoteDescription(jsep)\n\t\t\t\t\t.then(function() {\n\t\t\t\t\t\tJanus.log(\"Remote description accepted!\");\n\t\t\t\t\t\tconfig.remoteSdp = jsep.sdp;\n\t\t\t\t\t\t// Any trickle candidate we cached?\n\t\t\t\t\t\tif(config.candidates && config.candidates.length > 0) {\n\t\t\t\t\t\t\tfor(let i=0; i<config.candidates.length; i++) {\n\t\t\t\t\t\t\t\tlet candidate = config.candidates[i];\n\t\t\t\t\t\t\t\tJanus.debug(\"Adding remote candidate:\", candidate);\n\t\t\t\t\t\t\t\tif(!candidate || candidate.completed === true) {\n\t\t\t\t\t\t\t\t\t// end-of-candidates\n\t\t\t\t\t\t\t\t\tconfig.pc.addIceCandidate(Janus.endOfCandidates);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// New candidate\n\t\t\t\t\t\t\t\t\tconfig.pc.addIceCandidate(candidate);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconfig.candidates = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Done\n\t\t\t\t\t\tcallbacks.success();\n\t\t\t\t\t}, callbacks.error);\n\t\t\t} else {\n\t\t\t\tcallbacks.error(\"Invalid JSEP\");\n\t\t\t}\n\t\t}\n\n\t\tasync function createOffer(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.customizeSdp = (typeof callbacks.customizeSdp == \"function\") ? callbacks.customizeSdp : Janus.noop;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tthrow \"Invalid handle\";\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tJanus.log(\"Creating offer (iceDone=\" + config.iceDone + \")\");\n\t\t\t// https://code.google.com/p/webrtc/issues/detail?id=3508\n\t\t\tlet mediaConstraints = {};\n\t\t\tlet iceRestart = (callbacks.iceRestart === true);\n\t\t\t// If we need an ICE restart, set the related constraint\n\t\t\tif(iceRestart)\n\t\t\t\tmediaConstraints.iceRestart = true;\n\t\t\tJanus.debug(mediaConstraints);\n\t\t\tlet offer = await config.pc.createOffer(mediaConstraints);\n\t\t\tJanus.debug(offer);\n\t\t\t// JSON.stringify doesn't work on some WebRTC objects anymore\n\t\t\t// See https://code.google.com/p/chromium/issues/detail?id=467366\n\t\t\tlet jsep = {\n\t\t\t\ttype: 'offer',\n\t\t\t\tsdp: offer.sdp\n\t\t\t};\n\t\t\tcallbacks.customizeSdp(jsep);\n\t\t\toffer.sdp = jsep.sdp;\n\t\t\tJanus.log(\"Setting local description\");\n\t\t\tconfig.mySdp = {\n\t\t\t\ttype: 'offer',\n\t\t\t\tsdp: offer.sdp\n\t\t\t};\n\t\t\tawait config.pc.setLocalDescription(offer);\n\t\t\tconfig.mediaConstraints = mediaConstraints;\n\t\t\tif(!config.iceDone && !config.trickle) {\n\t\t\t\t// FIXME Don't do anything until we have all candidates\n\t\t\t\tJanus.log(\"Waiting for all candidates...\");\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// If transforms are present, notify Janus that the media is end-to-end encrypted\n\t\t\tif(config.insertableStreams || config.externalEncryption)\n\t\t\t\toffer.e2ee = true;\n\t\t\treturn offer;\n\t\t}\n\n\t\tasync function createAnswer(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.customizeSdp = (typeof callbacks.customizeSdp == \"function\") ? callbacks.customizeSdp : Janus.noop;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tthrow \"Invalid handle\";\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tJanus.log(\"Creating answer (iceDone=\" + config.iceDone + \")\");\n\t\t\tlet answer = await config.pc.createAnswer();\n\t\t\tJanus.debug(answer);\n\t\t\t// JSON.stringify doesn't work on some WebRTC objects anymore\n\t\t\t// See https://code.google.com/p/chromium/issues/detail?id=467366\n\t\t\tlet jsep = {\n\t\t\t\ttype: 'answer',\n\t\t\t\tsdp: answer.sdp\n\t\t\t};\n\t\t\tcallbacks.customizeSdp(jsep);\n\t\t\tanswer.sdp = jsep.sdp;\n\t\t\tJanus.log(\"Setting local description\");\n\t\t\tconfig.mySdp = {\n\t\t\t\ttype: 'answer',\n\t\t\t\tsdp: answer.sdp\n\t\t\t};\n\t\t\tawait config.pc.setLocalDescription(answer);\n\t\t\tif(!config.iceDone && !config.trickle) {\n\t\t\t\t// FIXME Don't do anything until we have all candidates\n\t\t\t\tJanus.log(\"Waiting for all candidates...\");\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\t// If transforms are present, notify Janus that the media is end-to-end encrypted\n\t\t\tif(config.insertableStreams || config.externalEncryption)\n\t\t\t\tanswer.e2ee = true;\n\t\t\treturn answer;\n\t\t}\n\n\t\tfunction sendSDP(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == \"function\") ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == \"function\") ? callbacks.error : Janus.noop;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle, not sending anything\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tJanus.log(\"Sending offer/answer SDP...\");\n\t\t\tif(!config.mySdp) {\n\t\t\t\tJanus.warn(\"Local SDP instance is invalid, not sending anything...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconfig.mySdp = {\n\t\t\t\ttype: config.pc.localDescription.type,\n\t\t\t\tsdp: config.pc.localDescription.sdp\n\t\t\t};\n\t\t\tif(config.trickle === false)\n\t\t\t\tconfig.mySdp[\"trickle\"] = false;\n\t\t\tJanus.debug(callbacks);\n\t\t\tconfig.sdpSent = true;\n\t\t\tcallbacks.success(config.mySdp);\n\t\t}\n\n\t\tasync function replaceTracks(handleId, callbacks) {\n\t\t\tcallbacks = callbacks || {};\n\t\t\tcallbacks.success = (typeof callbacks.success == 'function') ? callbacks.success : Janus.noop;\n\t\t\tcallbacks.error = (typeof callbacks.error == 'function') ? callbacks.error : Janus.noop;\n\t\t\t// Check that callbacks.array is a valid array\n\t\t\tif(callbacks.tracks && !Array.isArray(callbacks.tracks)) {\n\t\t\t\tJanus.error('Tracks must be an array');\n\t\t\t\tcallbacks.error('Tracks must be an array');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Add the replace:true if it's missing\n\t\t\tfor(let track of callbacks.tracks) {\n\t\t\t\tif(track.add || (!track.replace && !track.remove))\n\t\t\t\t\ttrack.replace = true;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait captureDevices(handleId, callbacks);\n\t\t\t\tcallbacks.success();\n\t\t\t} catch(err) {\n\t\t\t\tJanus.error(err);\n\t\t\t\tcallbacks.error(err);\n\t\t\t}\n\t\t}\n\n\t\tasync function captureDevices(handleId, callbacks) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn('Invalid handle, not sending anything');\n\t\t\t\tthrow 'Invalid handle';\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn('Invalid PeerConnection');\n\t\t\t\tthrow 'Invalid PeerConnection';\n\t\t\t}\n\t\t\tlet tracks = callbacks.tracks;\n\t\t\tif(!tracks || !Array.isArray(tracks) || tracks.length === 0) {\n\t\t\t\t// Nothing to do\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet openedConsentDialog = false;\n\t\t\t// Check if we can/should group getUserMedia calls\n\t\t\tlet groups = {};\n\t\t\tfor(let track of tracks) {\n\t\t\t\tdelete track.gumGroup;\n\t\t\t\tif(!track.type || !['audio', 'video'].includes(track.type))\n\t\t\t\t\tcontinue;\n\t\t\t\tif(!track.capture || track.capture instanceof MediaStreamTrack)\n\t\t\t\t\tcontinue;\n\t\t\t\tlet group = track.group ? track.group : 'default';\n\t\t\t\tif(!groups[group])\n\t\t\t\t\tgroups[group] = {};\n\t\t\t\tif(groups[group][track.type])\n\t\t\t\t\tcontinue;\n\t\t\t\ttrack.gumGroup = group;\n\t\t\t\tgroups[group][track.type] = track;\n\t\t\t}\n\t\t\tlet keys = Object.keys(groups);\n\t\t\tfor(let key of keys) {\n\t\t\t\tlet group = groups[key];\n\t\t\t\tif(!group.audio || !group.video) {\n\t\t\t\t\tif(group.audio)\n\t\t\t\t\t\tdelete group.audio.gumGroup;\n\t\t\t\t\tif(group.video)\n\t\t\t\t\t\tdelete group.video.gumGroup;\n\t\t\t\t\tdelete groups[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet answer = (callbacks.jsep ? true : false);\n\t\t\tfor(let track of tracks) {\n\t\t\t\tif(!track.type) {\n\t\t\t\t\tJanus.warn('Missing track type:', track);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif(track.type === 'data') {\n\t\t\t\t\t// Easy enough: create a datachannel if we don't have one already\n\t\t\t\t\tif(config.pc.ondatachannel) {\n\t\t\t\t\t\tJanus.warn('Data channel exists already, not creating another one');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tJanus.log('Creating default data channel');\n\t\t\t\t\tcreateDataChannel(handleId, Janus.dataChanDefaultLabel, null, false);\n\t\t\t\t\tconfig.pc.ondatachannel = function(event) {\n\t\t\t\t\t\tJanus.log('Data channel created by Janus:', event);\n\t\t\t\t\t\tcreateDataChannel(handleId, event.channel.label, event.channel.protocol, event.channel);\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif((typeof track.add === 'undefined' || track.add === null) &&\n\t\t\t\t\t\t(typeof track.remove === 'undefined' || track.remove === null) &&\n\t\t\t\t\t\t(typeof track.replace === 'undefined' || track.replace === null)) {\n\t\t\t\t\t// Let's default to 'add'\n\t\t\t\t\ttrack.add = true;\n\t\t\t\t}\n\t\t\t\tif((track.add && track.remove) || (track.add && track.remove && track.replace)) {\n\t\t\t\t\tJanus.warn('Conflicting actions for track, ignoring:', track);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif(track.add && track.replace) {\n\t\t\t\t\tJanus.warn('Both add and replace provided, falling back to replace:', track);\n\t\t\t\t\tdelete track.add;\n\t\t\t\t} else if(track.remove && track.replace) {\n\t\t\t\t\tJanus.warn('Both remove and replace provided, falling back to remove:', track);\n\t\t\t\t\tdelete track.replace;\n\t\t\t\t}\n\t\t\t\tlet kind = track.type;\n\t\t\t\tif(track.type === 'screen')\n\t\t\t\t\tkind = 'video';\t// FIXME\n\t\t\t\tlet transceiver = null, sender = null;\n\t\t\t\tif(track.mid) {\n\t\t\t\t\t// Search by mid\n\t\t\t\t\ttransceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === track.mid && t.receiver.track.kind === kind));\n\t\t\t\t} else if(!track.add) {\n\t\t\t\t\t// Find the first track of this type\n\t\t\t\t\ttransceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.receiver.track.kind === kind));\n\t\t\t\t}\n\t\t\t\tif(track.replace || track.remove) {\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"Couldn't find a transceiver for track:\", track);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif(!transceiver.sender) {\n\t\t\t\t\t\tJanus.warn('No sender in the transceiver for track:', track);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tsender = transceiver.sender;\n\t\t\t\t}\n\t\t\t\tif(answer && !transceiver) {\n\t\t\t\t\ttransceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.receiver.track.kind === kind));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"Couldn't find a transceiver for track:\", track);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Capture the new track, if we need to\n\t\t\t\tlet nt = null, trackId = null;\n\t\t\t\tif(track.remove || track.replace) {\n\t\t\t\t\tJanus.log('Removing track from PeerConnection', track);\n\t\t\t\t\ttrackId = sender.track ? sender.track.id : null;\n\t\t\t\t\tawait sender.replaceTrack(null);\n\t\t\t\t\t// Get rid of the old track\n\t\t\t\t\tif(trackId && config.myStream) {\n\t\t\t\t\t\tlet rt = null;\n\t\t\t\t\t\tif(kind === 'audio' && config.myStream.getAudioTracks() && config.myStream.getAudioTracks().length) {\n\t\t\t\t\t\t\tfor(let t of config.myStream.getAudioTracks()) {\n\t\t\t\t\t\t\t\tif(t.id === trackId) {\n\t\t\t\t\t\t\t\t\trt = t;\n\t\t\t\t\t\t\t\t\tJanus.log('Removing audio track:', rt);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if(kind === 'video' && config.myStream.getVideoTracks() && config.myStream.getVideoTracks().length) {\n\t\t\t\t\t\t\tfor(let t of config.myStream.getVideoTracks()) {\n\t\t\t\t\t\t\t\tif(t.id === trackId) {\n\t\t\t\t\t\t\t\t\trt = t;\n\t\t\t\t\t\t\t\t\tJanus.log('Removing video track:', rt);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(rt) {\n\t\t\t\t\t\t\t// Remove the track and notify the application\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconfig.myStream.removeTrack(rt);\n\t\t\t\t\t\t\t\tpluginHandle.onlocaltrack(rt, false);\n\t\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\t\tJanus.error(\"Error calling onlocaltrack on removal for renegotiation\", e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Close the old track (unless we've been asked not to)\n\t\t\t\t\t\t\tif(rt.dontStop !== true) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\trt.stop();\n\t\t\t\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\t\t\t\t} catch(e) {}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(track.capture) {\n\t\t\t\t\tif(track.gumGroup && groups[track.gumGroup] && groups[track.gumGroup].stream) {\n\t\t\t\t\t\t// We did a getUserMedia before already\n\t\t\t\t\t\tlet stream = groups[track.gumGroup].stream;\n\t\t\t\t\t\tnt = (track.type === 'audio' ? stream.getAudioTracks()[0] : stream.getVideoTracks()[0]);\n\t\t\t\t\t\tdelete groups[track.gumGroup].stream;\n\t\t\t\t\t\tdelete groups[track.gumGroup];\n\t\t\t\t\t\tdelete track.gumGroup;\n\t\t\t\t\t} else if(track.capture instanceof MediaStreamTrack) {\n\t\t\t\t\t\t// An external track was provided, use that\n\t\t\t\t\t\tnt = track.capture;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(!openedConsentDialog) {\n\t\t\t\t\t\t\topenedConsentDialog = true;\n\t\t\t\t\t\t\tpluginHandle.consentDialog(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet constraints = Janus.trackConstraints(track), stream = null;\n\t\t\t\t\t\tif(track.type === 'audio' || track.type === 'video') {\n\t\t\t\t\t\t\t// Use getUserMedia: check if we need to group audio and video together\n\t\t\t\t\t\t\tif(track.gumGroup) {\n\t\t\t\t\t\t\t\tlet otherType = (track.type === 'audio' ? 'video' : 'audio');\n\t\t\t\t\t\t\t\tif(groups[track.gumGroup] && groups[track.gumGroup][otherType]) {\n\t\t\t\t\t\t\t\t\tlet otherTrack = groups[track.gumGroup][otherType];\n\t\t\t\t\t\t\t\t\tlet otherConstraints = Janus.trackConstraints(otherTrack);\n\t\t\t\t\t\t\t\t\tconstraints[otherType] = otherConstraints[otherType];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\n\t\t\t\t\t\t\tif(track.gumGroup && constraints.audio && constraints.video) {\n\t\t\t\t\t\t\t\t// We just performed a grouped getUserMedia, keep track of the\n\t\t\t\t\t\t\t\t// stream so that we can immediately assign the track later\n\t\t\t\t\t\t\t\tgroups[track.gumGroup].stream = stream;\n\t\t\t\t\t\t\t\tdelete track.gumGroup;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use getDisplayMedia\n\t\t\t\t\t\t\tstream = await navigator.mediaDevices.getDisplayMedia(constraints);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnt = (track.type === 'audio' ? stream.getAudioTracks()[0] : stream.getVideoTracks()[0]);\n\t\t\t\t\t}\n\t\t\t\t\tif(track.replace) {\n\t\t\t\t\t\t// Replace the track\n\t\t\t\t\t\tawait sender.replaceTrack(nt);\n\t\t\t\t\t\t// Update the transceiver direction\n\t\t\t\t\t\tlet newDirection = 'sendrecv';\n\t\t\t\t\t\tif(track.recv === false || transceiver.direction === 'inactive' || transceiver.direction === 'sendonly')\n\t\t\t\t\t\t\tnewDirection = 'sendonly';\n\t\t\t\t\t\tif(transceiver.setDirection)\n\t\t\t\t\t\t\ttransceiver.setDirection(newDirection);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttransceiver.direction = newDirection;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// FIXME Add as a new track\n\t\t\t\t\t\tif(!config.myStream)\n\t\t\t\t\t\t\tconfig.myStream = new MediaStream();\n\t\t\t\t\t\tif(kind === 'audio' || (!track.simulcast && !track.svc)) {\n\t\t\t\t\t\t\tsender = config.pc.addTrack(nt, config.myStream);\n\t\t\t\t\t\t\ttransceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t\t\t.find(t => (t.sender === sender));\n\t\t\t\t\t\t} else if(track.simulcast) {\n\t\t\t\t\t\t\tif(Janus.webRTCAdapter.browserDetails.browser !== 'firefox') {\n\t\t\t\t\t\t\t\t// Standard RID\n\t\t\t\t\t\t\t\tJanus.log('Enabling rid-based simulcasting:', nt);\n\t\t\t\t\t\t\t\tlet maxBitrates = getMaxBitrates(track.simulcastMaxBitrates);\n\t\t\t\t\t\t\t\ttransceiver = config.pc.addTransceiver(nt, {\n\t\t\t\t\t\t\t\t\tdirection: 'sendrecv',\n\t\t\t\t\t\t\t\t\tstreams: [config.myStream],\n\t\t\t\t\t\t\t\t\tsendEncodings: track.sendEncodings || [\n\t\t\t\t\t\t\t\t\t\t{ rid: 'h', active: true, scalabilityMode: 'L1T2', maxBitrate: maxBitrates.high },\n\t\t\t\t\t\t\t\t\t\t{ rid: 'm', active: true, scalabilityMode: 'L1T2', maxBitrate: maxBitrates.medium, scaleResolutionDownBy: 2 },\n\t\t\t\t\t\t\t\t\t\t{ rid: 'l', active: true, scalabilityMode: 'L1T2', maxBitrate: maxBitrates.low, scaleResolutionDownBy: 4 }\n\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Firefox-based RID, based on https://gist.github.com/voluntas/088bc3cc62094730647b\n\t\t\t\t\t\t\t\tJanus.log('Enabling Simulcasting for Firefox (RID)');\n\t\t\t\t\t\t\t\ttransceiver = config.pc.addTransceiver(nt, {\n\t\t\t\t\t\t\t\t\tdirection: 'sendrecv',\n\t\t\t\t\t\t\t\t\tstreams: [config.myStream]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tsender = transceiver ? transceiver.sender : null;\n\t\t\t\t\t\t\t\tif(sender) {\n\t\t\t\t\t\t\t\t\tlet parameters = sender.getParameters();\n\t\t\t\t\t\t\t\t\tif(!parameters)\n\t\t\t\t\t\t\t\t\t\tparameters = {};\n\t\t\t\t\t\t\t\t\tlet maxBitrates = getMaxBitrates(track.simulcastMaxBitrates);\n\t\t\t\t\t\t\t\t\tparameters.encodings = track.sendEncodings || [\n\t\t\t\t\t\t\t\t\t\t{ rid: 'h', active: true, maxBitrate: maxBitrates.high },\n\t\t\t\t\t\t\t\t\t\t{ rid: 'm', active: true, maxBitrate: maxBitrates.medium, scaleResolutionDownBy: 2 },\n\t\t\t\t\t\t\t\t\t\t{ rid: 'l', active: true, maxBitrate: maxBitrates.low, scaleResolutionDownBy: 4 }\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tsender.setParameters(parameters);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tJanus.log('Enabling SVC (' + track.svc + '):', nt);\n\t\t\t\t\t\t\ttransceiver = config.pc.addTransceiver(nt, {\n\t\t\t\t\t\t\t\tdirection: 'sendrecv',\n\t\t\t\t\t\t\t\tstreams: [config.myStream],\n\t\t\t\t\t\t\t\tsendEncodings: [\n\t\t\t\t\t\t\t\t\t{ scalabilityMode: track.svc }\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!sender)\n\t\t\t\t\t\t\tsender = transceiver ? transceiver.sender : null;\n\t\t\t\t\t\t// Check if we need to override some settings\n\t\t\t\t\t\tif(track.codec) {\n\t\t\t\t\t\t\tif(Janus.webRTCAdapter.browserDetails.browser === 'firefox') {\n\t\t\t\t\t\t\t\tJanus.warn('setCodecPreferences not supported in Firefox, ignoring codec for track:', track);\n\t\t\t\t\t\t\t} else if(typeof track.codec !== 'string') {\n\t\t\t\t\t\t\t\tJanus.warn('Invalid codec value, ignoring for track:', track);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlet mimeType = kind + '/' + track.codec.toLowerCase();\n\t\t\t\t\t\t\t\tlet codecs = RTCRtpReceiver.getCapabilities(kind).codecs.filter(function(codec) {\n\t\t\t\t\t\t\t\t\treturn codec.mimeType.toLowerCase() === mimeType;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif(!codecs || codecs.length === 0) {\n\t\t\t\t\t\t\t\t\tJanus.warn('Codec not supported in this browser for this track, ignoring:', track);\n\t\t\t\t\t\t\t\t} else if(transceiver) {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\ttransceiver.setCodecPreferences(codecs);\n\t\t\t\t\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\t\t\t\t\tJanus.warn('Failed enforcing codec for this ' + kind + ' track:', err);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(track.bitrate) {\n\t\t\t\t\t\t\t// Override maximum bitrate\n\t\t\t\t\t\t\tif(track.simulcast || track.svc) {\n\t\t\t\t\t\t\t\tJanus.warn('Ignoring bitrate for simulcast/SVC track, use sendEncodings for that');\n\t\t\t\t\t\t\t} else if(isNaN(track.bitrate) || track.bitrate < 0) {\n\t\t\t\t\t\t\t\tJanus.warn('Ignoring invalid bitrate for track:', track);\n\t\t\t\t\t\t\t} else if(sender) {\n\t\t\t\t\t\t\t\tlet params = sender.getParameters();\n\t\t\t\t\t\t\t\tif(!params || !params.encodings || params.encodings.length === 0) {\n\t\t\t\t\t\t\t\t\tJanus.warn('No encodings in the sender parameters, ignoring bitrate for track:', track);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tparams.encodings[0].maxBitrate = track.bitrate;\n\t\t\t\t\t\t\t\t\tawait sender.setParameters(params);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(kind === 'video' && track.framerate) {\n\t\t\t\t\t\t\t// Override maximum framerate\n\t\t\t\t\t\t\tif(track.simulcast || track.svc) {\n\t\t\t\t\t\t\t\tJanus.warn('Ignoring framerate for simulcast/SVC track, use sendEncodings for that');\n\t\t\t\t\t\t\t} else if(isNaN(track.framerate) || track.framerate < 0) {\n\t\t\t\t\t\t\t\tJanus.warn('Ignoring invalid framerate for track:', track);\n\t\t\t\t\t\t\t} else if(sender) {\n\t\t\t\t\t\t\t\tlet params = sender.getParameters();\n\t\t\t\t\t\t\t\tif(!params || !params.encodings || params.encodings.length === 0) {\n\t\t\t\t\t\t\t\t\tJanus.warn('No encodings in the sender parameters, ignoring framerate for track:', track);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tparams.encodings[0].maxFramerate = track.framerate;\n\t\t\t\t\t\t\t\t\tawait sender.setParameters(params);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Check if insertable streams are involved\n\t\t\t\t\t\tif(track.transforms) {\n\t\t\t\t\t\t\tif(sender && track.transforms.sender) {\n\t\t\t\t\t\t\t\t// There's a sender transform, set it on the transceiver sender\n\t\t\t\t\t\t\t\tlet senderStreams = null;\n\t\t\t\t\t\t\t\tif(RTCRtpSender.prototype.createEncodedStreams) {\n\t\t\t\t\t\t\t\t\tsenderStreams = sender.createEncodedStreams();\n\t\t\t\t\t\t\t\t} else if(RTCRtpSender.prototype.createAudioEncodedStreams || RTCRtpSender.prototype.createEncodedVideoStreams) {\n\t\t\t\t\t\t\t\t\tif(kind === 'audio') {\n\t\t\t\t\t\t\t\t\t\tsenderStreams = sender.createEncodedAudioStreams();\n\t\t\t\t\t\t\t\t\t} else if(kind === 'video') {\n\t\t\t\t\t\t\t\t\t\tsenderStreams = sender.createEncodedVideoStreams();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(senderStreams) {\n\t\t\t\t\t\t\t\t\tif(senderStreams.readableStream && senderStreams.writableStream) {\n\t\t\t\t\t\t\t\t\t\tsenderStreams.readableStream\n\t\t\t\t\t\t\t\t\t\t\t.pipeThrough(track.transforms.sender)\n\t\t\t\t\t\t\t\t\t\t\t.pipeTo(senderStreams.writableStream);\n\t\t\t\t\t\t\t\t\t} else if(senderStreams.readable && senderStreams.writable) {\n\t\t\t\t\t\t\t\t\t\tsenderStreams.readable\n\t\t\t\t\t\t\t\t\t\t\t.pipeThrough(track.transforms.sender)\n\t\t\t\t\t\t\t\t\t\t\t.pipeTo(senderStreams.writable);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(transceiver && transceiver.receiver && track.transforms.receiver) {\n\t\t\t\t\t\t\t\t// There's a receiver transform, set it on the transceiver receiver\n\t\t\t\t\t\t\t\tlet receiverStreams = null;\n\t\t\t\t\t\t\t\tif(RTCRtpReceiver.prototype.createEncodedStreams) {\n\t\t\t\t\t\t\t\t\treceiverStreams = transceiver.receiver.createEncodedStreams();\n\t\t\t\t\t\t\t\t} else if(RTCRtpReceiver.prototype.createAudioEncodedStreams || RTCRtpReceiver.prototype.createEncodedVideoStreams) {\n\t\t\t\t\t\t\t\t\tif(kind === 'audio') {\n\t\t\t\t\t\t\t\t\t\treceiverStreams = transceiver.receiver.createEncodedAudioStreams();\n\t\t\t\t\t\t\t\t\t} else if(kind === 'video') {\n\t\t\t\t\t\t\t\t\t\treceiverStreams = transceiver.receiver.createEncodedVideoStreams();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(receiverStreams) {\n\t\t\t\t\t\t\t\t\tif(receiverStreams.readableStream && receiverStreams.writableStream) {\n\t\t\t\t\t\t\t\t\t\treceiverStreams.readableStream\n\t\t\t\t\t\t\t\t\t\t\t.pipeThrough(track.transforms.receiver)\n\t\t\t\t\t\t\t\t\t\t\t.pipeTo(receiverStreams.writableStream);\n\t\t\t\t\t\t\t\t\t} else if(receiverStreams.readable && receiverStreams.writable) {\n\t\t\t\t\t\t\t\t\t\treceiverStreams.readable\n\t\t\t\t\t\t\t\t\t\t\t.pipeThrough(track.transforms.receiver)\n\t\t\t\t\t\t\t\t\t\t\t.pipeTo(receiverStreams.writable);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(nt && track.dontStop === true)\n\t\t\t\t\t\tnt.dontStop = true;\n\t\t\t\t} else if(track.recv) {\n\t\t\t\t\t// Maybe a new recvonly track\n\t\t\t\t\tif(!transceiver)\n\t\t\t\t\t\ttransceiver = config.pc.addTransceiver(kind);\n\t\t\t\t\tif(transceiver) {\n\t\t\t\t\t\t// Check if we need to override some settings\n\t\t\t\t\t\tif(track.codec) {\n\t\t\t\t\t\t\tif(Janus.webRTCAdapter.browserDetails.browser === 'firefox') {\n\t\t\t\t\t\t\t\tJanus.warn('setCodecPreferences not supported in Firefox, ignoring codec for track:', track);\n\t\t\t\t\t\t\t} else if(typeof track.codec !== 'string') {\n\t\t\t\t\t\t\t\tJanus.warn('Invalid codec value, ignoring for track:', track);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlet mimeType = kind + '/' + track.codec.toLowerCase();\n\t\t\t\t\t\t\t\tlet codecs = RTCRtpReceiver.getCapabilities(kind).codecs.filter(function(codec) {\n\t\t\t\t\t\t\t\t\treturn codec.mimeType.toLowerCase() === mimeType;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif(!codecs || codecs.length === 0) {\n\t\t\t\t\t\t\t\t\tJanus.warn('Codec not supported in this browser for this track, ignoring:', track);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\ttransceiver.setCodecPreferences(codecs);\n\t\t\t\t\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\t\t\t\t\tJanus.warn('Failed enforcing codec for this ' + kind + ' track:', err);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Check if insertable streams are involved\n\t\t\t\t\t\tif(transceiver.receiver && track.transforms && track.transforms.receiver) {\n\t\t\t\t\t\t\t// There's a receiver transform, set it on the transceiver receiver\n\t\t\t\t\t\t\tlet receiverStreams = null;\n\t\t\t\t\t\t\tif(RTCRtpReceiver.prototype.createEncodedStreams) {\n\t\t\t\t\t\t\t\treceiverStreams = transceiver.receiver.createEncodedStreams();\n\t\t\t\t\t\t\t} else if(RTCRtpReceiver.prototype.createAudioEncodedStreams || RTCRtpReceiver.prototype.createEncodedVideoStreams) {\n\t\t\t\t\t\t\t\tif(kind === 'audio') {\n\t\t\t\t\t\t\t\t\treceiverStreams = transceiver.receiver.createEncodedAudioStreams();\n\t\t\t\t\t\t\t\t} else if(kind === 'video') {\n\t\t\t\t\t\t\t\t\treceiverStreams = transceiver.receiver.createEncodedVideoStreams();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(receiverStreams) {\n\t\t\t\t\t\t\t\tif(receiverStreams.readableStream && receiverStreams.writableStream) {\n\t\t\t\t\t\t\t\t\treceiverStreams.readableStream\n\t\t\t\t\t\t\t\t\t\t.pipeThrough(track.transforms.receiver)\n\t\t\t\t\t\t\t\t\t\t.pipeTo(receiverStreams.writableStream);\n\t\t\t\t\t\t\t\t} else if(receiverStreams.readable && receiverStreams.writable) {\n\t\t\t\t\t\t\t\t\treceiverStreams.readable\n\t\t\t\t\t\t\t\t\t\t.pipeThrough(track.transforms.receiver)\n\t\t\t\t\t\t\t\t\t\t.pipeTo(receiverStreams.writable);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(nt) {\n\t\t\t\t\t// FIXME Add the new track locally\n\t\t\t\t\tconfig.myStream.addTrack(nt);\n\t\t\t\t\t// Notify the application about the new local track, if any\n\t\t\t\t\tnt.onended = function(ev) {\n\t\t\t\t\t\tJanus.log('Local track removed:', ev);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpluginHandle.onlocaltrack(ev.target, false);\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\tJanus.error(\"Error calling onlocaltrack following end\", e);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpluginHandle.onlocaltrack(nt, true);\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\tJanus.error(\"Error calling onlocaltrack for track add\", e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Update the direction of the transceiver\n\t\t\t\tif(transceiver) {\n\t\t\t\t\tlet curdir = transceiver.direction, newdir = null;\n\t\t\t\t\tlet send = (nt && transceiver.sender.track),\n\t\t\t\t\t\trecv = (track.recv !== false && transceiver.receiver.track);\n\t\t\t\t\tif(send && recv)\n\t\t\t\t\t\tnewdir = 'sendrecv';\n\t\t\t\t\telse if(send && !recv)\n\t\t\t\t\t\tnewdir = 'sendonly';\n\t\t\t\t\telse if(!send && recv)\n\t\t\t\t\t\tnewdir = 'recvonly';\n\t\t\t\t\telse if(!send && !recv)\n\t\t\t\t\t\tnewdir = 'inactive';\n\t\t\t\t\tif(newdir && newdir !== curdir) {\n\t\t\t\t\t\tJanus.warn('Changing direction of transceiver to ' + newdir + ' (was ' + curdir + ')', track);\n\t\t\t\t\t\tif(transceiver.setDirection)\n\t\t\t\t\t\t\ttransceiver.setDirection(newdir);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttransceiver.direction = newdir;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(openedConsentDialog)\n\t\t\t\tpluginHandle.consentDialog(false);\n\t\t}\n\n\t\tfunction getLocalTracks(handleId) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn('Invalid handle');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn('Invalid PeerConnection');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet tracks = [];\n\t\t\tlet transceivers = config.pc.getTransceivers();\n\t\t\tfor(let tr of transceivers) {\n\t\t\t\tlet track = null;\n\t\t\t\tif(tr.sender && tr.sender.track) {\n\t\t\t\t\ttrack = { mid: tr.mid };\n\t\t\t\t\ttrack.type = tr.sender.track.kind;\n\t\t\t\t\ttrack.id = tr.sender.track.id;\n\t\t\t\t\ttrack.label = tr.sender.track.label;\n\t\t\t\t}\n\t\t\t\tif(track)\n\t\t\t\t\ttracks.push(track);\n\t\t\t}\n\t\t\treturn tracks;\n\t\t}\n\n\t\tfunction getRemoteTracks(handleId) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn('Invalid handle');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn('Invalid PeerConnection');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet tracks = [];\n\t\t\tlet transceivers = config.pc.getTransceivers();\n\t\t\tfor(let tr of transceivers) {\n\t\t\t\tlet track = null;\n\t\t\t\tif(tr.receiver && tr.receiver.track) {\n\t\t\t\t\ttrack = { mid: tr.mid };\n\t\t\t\t\ttrack.type = tr.receiver.track.kind;\n\t\t\t\t\ttrack.id = tr.receiver.track.id;\n\t\t\t\t\ttrack.label = tr.receiver.track.label;\n\t\t\t\t}\n\t\t\t\tif(track)\n\t\t\t\t\ttracks.push(track);\n\t\t\t}\n\t\t\treturn tracks;\n\t\t}\n\n\t\tfunction getVolume(handleId, mid, remote, result) {\n\t\t\tresult = (typeof result == \"function\") ? result : Janus.noop;\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\tresult(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet stream = remote ? \"remote\" : \"local\";\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.volume[stream])\n\t\t\t\tconfig.volume[stream] = { value: 0 };\n\t\t\t// Start getting the volume, if audioLevel in getStats is supported (apparently\n\t\t\t// they're only available in Chrome/Safari right now: https://webrtc-stats.callstats.io/)\n\t\t\tif(config.pc && config.pc.getStats && (Janus.webRTCAdapter.browserDetails.browser === \"chrome\" ||\n\t\t\t\t\tJanus.webRTCAdapter.browserDetails.browser === \"safari\")) {\n\t\t\t\t// Are we interested in a mid in particular?\n\t\t\t\tlet query = config.pc;\n\t\t\t\tif(mid) {\n\t\t\t\t\tlet transceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === mid && t.receiver.track.kind === \"audio\"));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"No audio transceiver with mid \" + mid);\n\t\t\t\t\t\tresult(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(remote && !transceiver.receiver) {\n\t\t\t\t\t\tJanus.warn(\"Remote transceiver track unavailable\");\n\t\t\t\t\t\tresult(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else if(!remote && !transceiver.sender) {\n\t\t\t\t\t\tJanus.warn(\"Local transceiver track unavailable\");\n\t\t\t\t\t\tresult(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tquery = remote ? transceiver.receiver : transceiver.sender;\n\t\t\t\t}\n\t\t\t\tquery.getStats()\n\t\t\t\t\t.then(function(stats) {\n\t\t\t\t\t\tstats.forEach(function (res) {\n\t\t\t\t\t\t\tif(!res || res.kind !== \"audio\")\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\tif((remote && !res.remoteSource) || (!remote && res.type !== \"media-source\"))\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\tresult(res.audioLevel ? res.audioLevel : 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\treturn config.volume[stream].value;\n\t\t\t} else {\n\t\t\t\t// audioInputLevel and audioOutputLevel seem only available in Chrome? audioLevel\n\t\t\t\t// seems to be available on Chrome and Firefox, but they don't seem to work\n\t\t\t\tJanus.warn(\"Getting the \" + stream + \" volume unsupported by browser\");\n\t\t\t\tresult(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tfunction isMuted(handleId, mid, video) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn(\"Invalid PeerConnection\");\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(!config.myStream) {\n\t\t\t\tJanus.warn(\"Invalid local MediaStream\");\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(video) {\n\t\t\t\t// Check video track\n\t\t\t\tif(!config.myStream.getVideoTracks() || config.myStream.getVideoTracks().length === 0) {\n\t\t\t\t\tJanus.warn(\"No video track\");\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif(mid) {\n\t\t\t\t\tlet transceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === mid && t.receiver.track.kind === \"video\"));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"No video transceiver with mid \" + mid);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif(!transceiver.sender || !transceiver.sender.track) {\n\t\t\t\t\t\tJanus.warn(\"No video sender with mid \" + mid);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn !transceiver.sender.track.enabled;\n\t\t\t\t} else {\n\t\t\t\t\treturn !config.myStream.getVideoTracks()[0].enabled;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Check audio track\n\t\t\t\tif(!config.myStream.getAudioTracks() || config.myStream.getAudioTracks().length === 0) {\n\t\t\t\t\tJanus.warn(\"No audio track\");\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif(mid) {\n\t\t\t\t\tlet transceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === mid && t.receiver.track.kind === \"audio\"));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"No audio transceiver with mid \" + mid);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif(!transceiver.sender || !transceiver.sender.track) {\n\t\t\t\t\t\tJanus.warn(\"No audio sender with mid \" + mid);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn !transceiver.sender.track.enabled;\n\t\t\t\t} else {\n\t\t\t\t\treturn !config.myStream.getAudioTracks()[0].enabled;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction mute(handleId, mid, video, mute) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn(\"Invalid PeerConnection\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!config.myStream) {\n\t\t\t\tJanus.warn(\"Invalid local MediaStream\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(video) {\n\t\t\t\t// Mute/unmute video track\n\t\t\t\tif(!config.myStream.getVideoTracks() || config.myStream.getVideoTracks().length === 0) {\n\t\t\t\t\tJanus.warn(\"No video track\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(mid) {\n\t\t\t\t\tlet transceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === mid && t.receiver.track.kind === \"video\"));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"No video transceiver with mid \" + mid);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(!transceiver.sender || !transceiver.sender.track) {\n\t\t\t\t\t\tJanus.warn(\"No video sender with mid \" + mid);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\ttransceiver.sender.track.enabled = mute ? false : true;\n\t\t\t\t} else {\n\t\t\t\t\tfor(const videostream of config.myStream.getVideoTracks()) {\n\t\t\t\t\t\tvideostream.enabled = !mute;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Mute/unmute audio track\n\t\t\t\tif(!config.myStream.getAudioTracks() || config.myStream.getAudioTracks().length === 0) {\n\t\t\t\t\tJanus.warn(\"No audio track\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(mid) {\n\t\t\t\t\tlet transceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === mid && t.receiver.track.kind === \"audio\"));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"No audio transceiver with mid \" + mid);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(!transceiver.sender || !transceiver.sender.track) {\n\t\t\t\t\t\tJanus.warn(\"No audio sender with mid \" + mid);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\ttransceiver.sender.track.enabled = mute ? false : true;\n\t\t\t\t} else {\n\t\t\t\t\tfor(const audiostream of config.myStream.getAudioTracks()) {\n\t\t\t\t\t\taudiostream.enabled = !mute;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction getBitrate(handleId, mid) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn(\"Invalid handle\");\n\t\t\t\treturn \"Invalid handle\";\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc)\n\t\t\t\treturn \"Invalid PeerConnection\";\n\t\t\t// Start getting the bitrate, if getStats is supported\n\t\t\tif(config.pc.getStats) {\n\t\t\t\tlet query = config.pc;\n\t\t\t\tlet target = mid ? mid : \"default\";\n\t\t\t\tif(mid) {\n\t\t\t\t\tlet transceiver = config.pc.getTransceivers()\n\t\t\t\t\t\t.find(t => (t.mid === mid && t.receiver.track.kind === \"video\"));\n\t\t\t\t\tif(!transceiver) {\n\t\t\t\t\t\tJanus.warn(\"No video transceiver with mid \" + mid);\n\t\t\t\t\t\treturn (\"No video transceiver with mid \" + mid);\n\t\t\t\t\t}\n\t\t\t\t\tif(!transceiver.receiver) {\n\t\t\t\t\t\tJanus.warn(\"No video receiver with mid \" + mid);\n\t\t\t\t\t\treturn (\"No video receiver with mid \" + mid);\n\t\t\t\t\t}\n\t\t\t\t\tquery = transceiver.receiver;\n\t\t\t\t}\n\t\t\t\tif(!config.bitrate[target]) {\n\t\t\t\t\tconfig.bitrate[target] = {\n\t\t\t\t\t\ttimer: null,\n\t\t\t\t\t\tbsnow: null,\n\t\t\t\t\t\tbsbefore: null,\n\t\t\t\t\t\ttsnow: null,\n\t\t\t\t\t\ttsbefore: null,\n\t\t\t\t\t\tvalue: \"0 kbits/sec\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif(!config.bitrate[target].timer) {\n\t\t\t\t\tJanus.log(\"Starting bitrate timer\" + (mid ? (\" for mid \" + mid) : \"\") + \" (via getStats)\");\n\t\t\t\t\tconfig.bitrate[target].timer = setInterval(function() {\n\t\t\t\t\t\tquery.getStats()\n\t\t\t\t\t\t\t.then(function(stats) {\n\t\t\t\t\t\t\t\tstats.forEach(function (res) {\n\t\t\t\t\t\t\t\t\tif(!res)\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\tlet inStats = false;\n\t\t\t\t\t\t\t\t\t// Check if these are statistics on incoming media\n\t\t\t\t\t\t\t\t\tif((res.mediaType === \"video\" || res.kind === \"video\" || res.id.toLowerCase().indexOf(\"video\") > -1) &&\n\t\t\t\t\t\t\t\t\t\t\tres.type === \"inbound-rtp\" && res.id.indexOf(\"rtcp\") < 0) {\n\t\t\t\t\t\t\t\t\t\t// New stats\n\t\t\t\t\t\t\t\t\t\tinStats = true;\n\t\t\t\t\t\t\t\t\t} else if(res.type == 'ssrc' && res.bytesReceived &&\n\t\t\t\t\t\t\t\t\t\t\t(res.googCodecName === \"VP8\" || res.googCodecName === \"\")) {\n\t\t\t\t\t\t\t\t\t\t// Older Chromer versions\n\t\t\t\t\t\t\t\t\t\tinStats = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Parse stats now\n\t\t\t\t\t\t\t\t\tif(inStats) {\n\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].bsnow = res.bytesReceived;\n\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].tsnow = res.timestamp;\n\t\t\t\t\t\t\t\t\t\tif(config.bitrate[target].bsbefore === null || config.bitrate[target].tsbefore === null) {\n\t\t\t\t\t\t\t\t\t\t\t// Skip this round\n\t\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].bsbefore = config.bitrate[target].bsnow;\n\t\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].tsbefore = config.bitrate[target].tsnow;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t// Calculate bitrate\n\t\t\t\t\t\t\t\t\t\t\tlet timePassed = config.bitrate[target].tsnow - config.bitrate[target].tsbefore;\n\t\t\t\t\t\t\t\t\t\t\tif(Janus.webRTCAdapter.browserDetails.browser === \"safari\")\n\t\t\t\t\t\t\t\t\t\t\t\ttimePassed = timePassed/1000;\t// Apparently the timestamp is in microseconds, in Safari\n\t\t\t\t\t\t\t\t\t\t\tlet bitRate = Math.round((config.bitrate[target].bsnow - config.bitrate[target].bsbefore) * 8 / timePassed);\n\t\t\t\t\t\t\t\t\t\t\tif(Janus.webRTCAdapter.browserDetails.browser === \"safari\")\n\t\t\t\t\t\t\t\t\t\t\t\tbitRate = parseInt(bitRate/1000);\n\t\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].value = bitRate + ' kbits/sec';\n\t\t\t\t\t\t\t\t\t\t\t//~ Janus.log(\"Estimated bitrate is \" + config.bitrate.value);\n\t\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].bsbefore = config.bitrate[target].bsnow;\n\t\t\t\t\t\t\t\t\t\t\tconfig.bitrate[target].tsbefore = config.bitrate[target].tsnow;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}, 1000);\n\t\t\t\t\treturn \"0 kbits/sec\";\t// We don't have a bitrate value yet\n\t\t\t\t}\n\t\t\t\treturn config.bitrate[target].value;\n\t\t\t} else {\n\t\t\t\tJanus.warn(\"Getting the video bitrate unsupported by browser\");\n\t\t\t\treturn \"Feature unsupported by browser\";\n\t\t\t}\n\t\t}\n\n\t\tfunction setBitrate(handleId, mid, bitrate) {\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle || !pluginHandle.webrtcStuff) {\n\t\t\t\tJanus.warn('Invalid handle');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(!config.pc) {\n\t\t\t\tJanus.warn('Invalid PeerConnection');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet transceiver = config.pc.getTransceivers().find(t => (t.mid === mid));\n\t\t\tif(!transceiver) {\n\t\t\t\tJanus.warn('No transceiver with mid', mid);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!transceiver.sender) {\n\t\t\t\tJanus.warn('No sender for transceiver with mid', mid);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet params = transceiver.sender.getParameters();\n\t\t\tif(!params || !params.encodings || params.encodings.length === 0) {\n\t\t\t\tJanus.warn('No parameters encodings');\n\t\t\t} else if(params.encodings.length > 1) {\n\t\t\t\tJanus.warn('Ignoring bitrate for simulcast track, use sendEncodings for that');\n\t\t\t} else if(isNaN(bitrate) || bitrate < 0) {\n\t\t\t\tJanus.warn('Invalid bitrate (must be a positive integer)');\n\t\t\t} else {\n\t\t\t\tparams.encodings[0].maxBitrate = bitrate;\n\t\t\t\ttransceiver.sender.setParameters(params);\n\t\t\t}\n\t\t}\n\n\t\tfunction webrtcError(error) {\n\t\t\tJanus.error(\"WebRTC error:\", error);\n\t\t}\n\n\t\tfunction cleanupWebrtc(handleId, hangupRequest) {\n\t\t\tJanus.log(\"Cleaning WebRTC stuff\");\n\t\t\tlet pluginHandle = pluginHandles.get(handleId);\n\t\t\tif(!pluginHandle) {\n\t\t\t\t// Nothing to clean\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet config = pluginHandle.webrtcStuff;\n\t\t\tif(config) {\n\t\t\t\tif(hangupRequest === true) {\n\t\t\t\t\t// Send a hangup request (we don't really care about the response)\n\t\t\t\t\tlet request = { \"janus\": \"hangup\", \"transaction\": Janus.randomString(12) };\n\t\t\t\t\tif(pluginHandle.token)\n\t\t\t\t\t\trequest[\"token\"] = pluginHandle.token;\n\t\t\t\t\tif(apisecret)\n\t\t\t\t\t\trequest[\"apisecret\"] = apisecret;\n\t\t\t\t\tJanus.debug(\"Sending hangup request (handle=\" + handleId + \"):\");\n\t\t\t\t\tJanus.debug(request);\n\t\t\t\t\tif(websockets) {\n\t\t\t\t\t\trequest[\"session_id\"] = sessionId;\n\t\t\t\t\t\trequest[\"handle_id\"] = handleId;\n\t\t\t\t\t\tws.send(JSON.stringify(request));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tJanus.httpAPICall(server + \"/\" + sessionId + \"/\" + handleId, {\n\t\t\t\t\t\t\tverb: 'POST',\n\t\t\t\t\t\t\twithCredentials: withCredentials,\n\t\t\t\t\t\t\tbody: request\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Cleanup stack\n\t\t\t\tif(config.volume) {\n\t\t\t\t\tif(config.volume[\"local\"] && config.volume[\"local\"].timer)\n\t\t\t\t\t\tclearInterval(config.volume[\"local\"].timer);\n\t\t\t\t\tif(config.volume[\"remote\"] && config.volume[\"remote\"].timer)\n\t\t\t\t\t\tclearInterval(config.volume[\"remote\"].timer);\n\t\t\t\t}\n\t\t\t\tfor(let i in config.bitrate) {\n\t\t\t\t\tif(config.bitrate[i].timer)\n\t\t\t\t\t\tclearInterval(config.bitrate[i].timer);\n\t\t\t\t}\n\t\t\t\tconfig.bitrate = {};\n\t\t\t\tif(!config.streamExternal && config.myStream) {\n\t\t\t\t\tJanus.log(\"Stopping local stream tracks\");\n\t\t\t\t\tJanus.stopAllTracks(config.myStream);\n\t\t\t\t}\n\t\t\t\tconfig.streamExternal = false;\n\t\t\t\tconfig.myStream = null;\n\t\t\t\t// Close PeerConnection\n\t\t\t\ttry {\n\t\t\t\t\tconfig.pc.close();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t} catch(e) {\n\t\t\t\t\t// Do nothing\n\t\t\t\t}\n\t\t\t\tconfig.pc = null;\n\t\t\t\tconfig.candidates = null;\n\t\t\t\tconfig.mySdp = null;\n\t\t\t\tconfig.remoteSdp = null;\n\t\t\t\tconfig.iceDone = false;\n\t\t\t\tconfig.dataChannel = {};\n\t\t\t\tconfig.dtmfSender = null;\n\t\t\t\tconfig.insertableStreams = false;\n\t\t\t\tconfig.externalEncryption = false;\n\t\t\t}\n\t\t\tpluginHandle.oncleanup();\n\t\t}\n\n\t\tfunction isTrickleEnabled(trickle) {\n\t\t\tJanus.debug(\"isTrickleEnabled:\", trickle);\n\t\t\treturn (trickle === false) ? false : true;\n\t\t}\n\t}\n\n\treturn Janus;\n\n}));\n\nexport { Janus as default };\n"],"names":["Janus","factory","define","amd","module","exports","window","sessions","Map","isExtensionEnabled","navigator","mediaDevices","getDisplayMedia","userAgent","match","chromever","parseInt","maxver","extension","isInstalled","defaultExtension","extensionId","document","querySelector","getScreen","callback","pending","setTimeout","error","Error","name","cache","postMessage","type","id","init","addEventListener","event","origin","location","data","sourceId","clearTimeout","useDefaultDependencies","deps","f","fetch","p","Promise","socketCls","WebSocket","newWebSocket","server","proto","isArray","arr","Array","webRTCAdapter","adapter","httpAPICall","url","options","fetchOptions","method","verb","headers","withCredentials","credentials","body","JSON","stringify","fetching","catch","reject","message","timeout","resolve","timerId","race","then","response","ok","success","noop","json","parsed","useOldDependencies","jq","jQuery","payload","contentType","xhrFields","ajax","extend","dataType","async","result","xhr","status","err","mediaToTracks","media","tracks","push","capture","recv","keepAudio","audio","audioSend","audioRecv","addAudio","replaceAudio","removeAudio","track","remove","add","replace","keepVideo","video","videoSend","videoRecv","addVideo","replaceVideo","removeVideo","includes","screenshareFrameRate","frameRate","screenshareHeight","height","screenshareWidth","width","trackConstraints","constraints","simulcast","svc","log","ideal","dataChanDefaultLabel","endOfCandidates","stopAllTracks","stream","getTracks","mst","dontStop","stop","e","initDone","console","trace","debug","vdebug","warn","bind","d","usedDependencies","dependencies","listDevices","config","isGetUserMediaAvailable","getUserMedia","enumerateDevices","devices","attachMediaStream","element","srcObject","src","URL","createObjectURL","reattachMediaStream","to","from","iOS","indexOf","platform","eventName","oldOBF","sessionId","session","destroyOnUnload","destroy","unload","notifyDestroyed","safariVp8","safariVp9","browserDetails","browser","version","RTCRtpSender","getCapabilities","codecs","length","codec","mimeType","toLowerCase","testpc","RTCPeerConnection","createOffer","offerToReceiveVideo","offer","sdp","close","isWebrtcSupported","randomString","len","charSet","i","randomPoz","Math","floor","random","charAt","gatewayCallbacks","destroyed","websockets","ws","wsHandlers","wsKeepaliveTimeoutId","servers","serversIndex","iceServers","urls","iceTransportPolicy","bundlePolicy","maxev","max_poll_events","token","apisecret","keepAlivePeriod","isNaN","longPollTimeout","getMaxBitrates","simulcastMaxBitrates","maxBitrates","high","medium","low","connected","pluginHandles","that","retries","transactions","createSession","getServer","isConnected","reconnect","callbacks","getSessionId","getInfo","destroySession","attach","createHandle","eventHandler","longpoll","Date","getTime","encodeURIComponent","handleEvent","textStatus","errorThrown","skipTimeout","transaction","reportSuccess","get","delete","sender","pluginHandle","candidate","webrtcStuff","pc","remoteSdp","completed","addIceCandidate","candidates","webrtcState","hangup","ondetached","detach","mediaState","slowLink","code","reason","plugindata","jsep","onmessage","keepAlive","request","send","onopen","onerror","onclose","set","parse","cleanupHandles","handleId","keys","destroyHandle","noRequest","sendBeacon","unbindWebSocket","removeEventListener","onUnbindMessage","onUnbindError","session_id","readyState","dataChannelOptions","ordered","consentDialog","connectionState","iceState","onlocaltrack","onremotetrack","ondata","ondataopen","oncleanup","plugin","opaqueId","loopIndex","handleToken","detached","started","myStream","streamExternal","mySdp","mediaConstraints","dataChannel","dtmfSender","trickle","iceDone","bitrate","getId","getPlugin","getVolume","mid","getRemoteVolume","getLocalVolume","isAudioMuted","isMuted","muteAudio","mute","unmuteAudio","isVideoMuted","muteVideo","unmuteVideo","getBitrate","setMaxBitrate","setBitrate","sendMessage","sendData","dtmf","sendDtmf","prepareWebrtc","createAnswer","handleRemoteJsep","prepareWebrtcPeer","replaceTracks","getLocalTracks","getRemoteTracks","sendRequest","cleanupWebrtc","e2ee","rid_order","force_relay","transceivers","getTransceivers","mindex","tr","kind","params","getParameters","encodings","scalabilityMode","sendTrickleCandidate","createDataChannel","dclabel","dcprotocol","incoming","pendingData","onDataChannelMessage","label","target","onDataChannelStateChange","protocol","dcState","onDataChannelError","dcoptions","text","senders","getSenders","audioSender","find","ontonechange","tone","tones","duration","gap","insertDTMF","createPeerconnectionIfNeeded","pc_config","sdpSemantics","insertableStreams","transforms","receiver","externalEncryption","prototype","createEncodedStreams","createEncodedAudioStreams","createEncodedVideoStreams","forceEncodedAudioInsertableStreams","forceEncodedVideoInsertableStreams","encodedInsertableStreams","getStats","volume","value","onconnectionstatechange","oniceconnectionstatechange","iceConnectionState","onicecandidate","sendSDP","sdpMid","sdpMLineIndex","ontrack","streams","transceiver","mids","onended","trackMutedTimeoutId","ev","t","onmute","onunmute","webrtcError","simulcast2","isTrickleEnabled","captureDevices","setRemoteDescription","answer","customizeSdp","iceRestart","setLocalDescription","localDescription","sdpSent","openedConsentDialog","groups","gumGroup","MediaStreamTrack","group","Object","key","ondatachannel","channel","nt","trackId","replaceTrack","rt","getAudioTracks","getVideoTracks","removeTrack","otherType","otherTrack","otherConstraints","newDirection","direction","setDirection","MediaStream","addTrack","addTransceiver","sendEncodings","rid","active","maxBitrate","scaleResolutionDownBy","parameters","setParameters","RTCRtpReceiver","filter","setCodecPreferences","framerate","maxFramerate","senderStreams","createAudioEncodedStreams","readableStream","writableStream","pipeThrough","pipeTo","readable","writable","receiverStreams","curdir","newdir","remote","query","stats","forEach","res","remoteSource","audioLevel","enabled","videostream","audiostream","timer","bsnow","bsbefore","tsnow","tsbefore","setInterval","inStats","mediaType","bytesReceived","googCodecName","timestamp","timePassed","bitRate","round","hangupRequest","clearInterval"],"mappings":"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","x_google_ignoreList":[0]}