livekit-client 0.18.4-RC6 → 0.18.4

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 (127) hide show
  1. package/README.md +2 -5
  2. package/dist/api/RequestQueue.d.ts +13 -12
  3. package/dist/api/RequestQueue.d.ts.map +1 -0
  4. package/dist/api/SignalClient.d.ts +67 -66
  5. package/dist/api/SignalClient.d.ts.map +1 -0
  6. package/dist/connect.d.ts +24 -23
  7. package/dist/connect.d.ts.map +1 -0
  8. package/dist/index.d.ts +27 -26
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/livekit-client.esm.mjs +546 -486
  11. package/dist/livekit-client.esm.mjs.map +1 -1
  12. package/dist/livekit-client.umd.js +1 -1
  13. package/dist/livekit-client.umd.js.map +1 -1
  14. package/dist/logger.d.ts +26 -25
  15. package/dist/logger.d.ts.map +1 -0
  16. package/dist/options.d.ts +128 -127
  17. package/dist/options.d.ts.map +1 -0
  18. package/dist/proto/google/protobuf/timestamp.d.ts +133 -132
  19. package/dist/proto/google/protobuf/timestamp.d.ts.map +1 -0
  20. package/dist/proto/livekit_models.d.ts +876 -868
  21. package/dist/proto/livekit_models.d.ts.map +1 -0
  22. package/dist/proto/livekit_rtc.d.ts +3904 -3859
  23. package/dist/proto/livekit_rtc.d.ts.map +1 -0
  24. package/dist/room/DeviceManager.d.ts +8 -7
  25. package/dist/room/DeviceManager.d.ts.map +1 -0
  26. package/dist/room/PCTransport.d.ts +16 -15
  27. package/dist/room/PCTransport.d.ts.map +1 -0
  28. package/dist/room/RTCEngine.d.ts +67 -66
  29. package/dist/room/RTCEngine.d.ts.map +1 -0
  30. package/dist/room/Room.d.ts +166 -165
  31. package/dist/room/Room.d.ts.map +1 -0
  32. package/dist/room/errors.d.ts +29 -28
  33. package/dist/room/errors.d.ts.map +1 -0
  34. package/dist/room/events.d.ts +391 -390
  35. package/dist/room/events.d.ts.map +1 -0
  36. package/dist/room/participant/LocalParticipant.d.ts +126 -125
  37. package/dist/room/participant/LocalParticipant.d.ts.map +1 -0
  38. package/dist/room/participant/Participant.d.ts +94 -93
  39. package/dist/room/participant/Participant.d.ts.map +1 -0
  40. package/dist/room/participant/ParticipantTrackPermission.d.ts +26 -19
  41. package/dist/room/participant/ParticipantTrackPermission.d.ts.map +1 -0
  42. package/dist/room/participant/RemoteParticipant.d.ts +40 -39
  43. package/dist/room/participant/RemoteParticipant.d.ts.map +1 -0
  44. package/dist/room/participant/publishUtils.d.ts +18 -17
  45. package/dist/room/participant/publishUtils.d.ts.map +1 -0
  46. package/dist/room/stats.d.ts +66 -65
  47. package/dist/room/stats.d.ts.map +1 -0
  48. package/dist/room/track/LocalAudioTrack.d.ts +20 -19
  49. package/dist/room/track/LocalAudioTrack.d.ts.map +1 -0
  50. package/dist/room/track/LocalTrack.d.ts +28 -27
  51. package/dist/room/track/LocalTrack.d.ts.map +1 -0
  52. package/dist/room/track/LocalTrackPublication.d.ts +38 -37
  53. package/dist/room/track/LocalTrackPublication.d.ts.map +1 -0
  54. package/dist/room/track/LocalVideoTrack.d.ts +31 -30
  55. package/dist/room/track/LocalVideoTrack.d.ts.map +1 -0
  56. package/dist/room/track/RemoteAudioTrack.d.ts +20 -19
  57. package/dist/room/track/RemoteAudioTrack.d.ts.map +1 -0
  58. package/dist/room/track/RemoteTrack.d.ts +16 -15
  59. package/dist/room/track/RemoteTrack.d.ts.map +1 -0
  60. package/dist/room/track/RemoteTrackPublication.d.ts +51 -50
  61. package/dist/room/track/RemoteTrackPublication.d.ts.map +1 -0
  62. package/dist/room/track/RemoteVideoTrack.d.ts +28 -27
  63. package/dist/room/track/RemoteVideoTrack.d.ts.map +1 -0
  64. package/dist/room/track/Track.d.ts +101 -100
  65. package/dist/room/track/Track.d.ts.map +1 -0
  66. package/dist/room/track/TrackPublication.d.ts +50 -49
  67. package/dist/room/track/TrackPublication.d.ts.map +1 -0
  68. package/dist/room/track/create.d.ts +24 -23
  69. package/dist/room/track/create.d.ts.map +1 -0
  70. package/dist/room/track/defaults.d.ts +5 -4
  71. package/dist/room/track/defaults.d.ts.map +1 -0
  72. package/dist/room/track/options.d.ts +223 -222
  73. package/dist/room/track/options.d.ts.map +1 -0
  74. package/dist/room/track/types.d.ts +19 -18
  75. package/dist/room/track/types.d.ts.map +1 -0
  76. package/dist/room/track/utils.d.ts +14 -13
  77. package/dist/room/track/utils.d.ts.map +1 -0
  78. package/dist/room/utils.d.ts +17 -15
  79. package/dist/room/utils.d.ts.map +1 -0
  80. package/dist/test/mocks.d.ts +12 -11
  81. package/dist/test/mocks.d.ts.map +1 -0
  82. package/dist/version.d.ts +3 -2
  83. package/dist/version.d.ts.map +1 -0
  84. package/package.json +4 -5
  85. package/src/api/RequestQueue.ts +53 -0
  86. package/src/api/SignalClient.ts +497 -0
  87. package/src/connect.ts +98 -0
  88. package/src/index.ts +49 -0
  89. package/src/logger.ts +56 -0
  90. package/src/options.ts +156 -0
  91. package/src/proto/google/protobuf/timestamp.ts +216 -0
  92. package/src/proto/livekit_models.ts +2456 -0
  93. package/src/proto/livekit_rtc.ts +2859 -0
  94. package/src/room/DeviceManager.ts +80 -0
  95. package/src/room/PCTransport.ts +88 -0
  96. package/src/room/RTCEngine.ts +695 -0
  97. package/src/room/Room.ts +970 -0
  98. package/src/room/errors.ts +65 -0
  99. package/src/room/events.ts +438 -0
  100. package/src/room/participant/LocalParticipant.ts +755 -0
  101. package/src/room/participant/Participant.ts +287 -0
  102. package/src/room/participant/ParticipantTrackPermission.ts +42 -0
  103. package/src/room/participant/RemoteParticipant.ts +263 -0
  104. package/src/room/participant/publishUtils.test.ts +144 -0
  105. package/src/room/participant/publishUtils.ts +229 -0
  106. package/src/room/stats.ts +134 -0
  107. package/src/room/track/LocalAudioTrack.ts +134 -0
  108. package/src/room/track/LocalTrack.ts +229 -0
  109. package/src/room/track/LocalTrackPublication.ts +87 -0
  110. package/src/room/track/LocalVideoTrack.test.ts +72 -0
  111. package/src/room/track/LocalVideoTrack.ts +295 -0
  112. package/src/room/track/RemoteAudioTrack.ts +86 -0
  113. package/src/room/track/RemoteTrack.ts +62 -0
  114. package/src/room/track/RemoteTrackPublication.ts +207 -0
  115. package/src/room/track/RemoteVideoTrack.ts +240 -0
  116. package/src/room/track/Track.ts +358 -0
  117. package/src/room/track/TrackPublication.ts +120 -0
  118. package/src/room/track/create.ts +122 -0
  119. package/src/room/track/defaults.ts +27 -0
  120. package/src/room/track/options.ts +281 -0
  121. package/src/room/track/types.ts +20 -0
  122. package/src/room/track/utils.test.ts +110 -0
  123. package/src/room/track/utils.ts +113 -0
  124. package/src/room/utils.ts +115 -0
  125. package/src/test/mocks.ts +17 -0
  126. package/src/version.ts +2 -0
  127. package/CHANGELOG.md +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"livekit-client.umd.js","sources":["../src/logger.ts","../node_modules/.pnpm/loglevel@1.8.0/node_modules/loglevel/lib/loglevel.js","../node_modules/long/src/long.js","../node_modules/.pnpm/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js","../node_modules/.pnpm/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js","../node_modules/.pnpm/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js","../node_modules/.pnpm/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js","../node_modules/.pnpm/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js","../node_modules/.pnpm/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js","../node_modules/.pnpm/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/util/longbits.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/util/minimal.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/writer.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/writer_buffer.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/reader.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/reader_buffer.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/rpc/service.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/rpc.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/roots.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/src/index-minimal.js","../node_modules/.pnpm/protobufjs@6.11.2/node_modules/protobufjs/minimal.js","../src/proto/livekit_models.ts","../src/proto/google/protobuf/timestamp.ts","../src/proto/livekit_rtc.ts","../src/room/errors.ts","../src/room/events.ts","../src/room/stats.ts","../src/room/DeviceManager.ts","../src/version.ts","../src/room/utils.ts","../node_modules/.pnpm/events@3.3.0/node_modules/events/events.js","../src/room/track/Track.ts","../src/room/track/LocalTrack.ts","../src/room/track/utils.ts","../src/room/track/LocalAudioTrack.ts","../src/room/track/LocalVideoTrack.ts","../src/room/track/RemoteTrack.ts","../src/room/track/RemoteAudioTrack.ts","../node_modules/.pnpm/ts-debounce@3.0.0/node_modules/ts-debounce/dist/src/index.esm.js","../src/room/track/RemoteVideoTrack.ts","../src/room/track/TrackPublication.ts","../src/room/track/LocalTrackPublication.ts","../src/room/track/options.ts","../src/room/participant/Participant.ts","../src/room/participant/publishUtils.ts","../src/room/track/RemoteTrackPublication.ts","../src/room/participant/RemoteParticipant.ts","../src/room/participant/LocalParticipant.ts","../src/room/participant/ParticipantTrackPermission.ts","../src/api/RequestQueue.ts","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/utils.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/safari/safari_shim.js","../node_modules/.pnpm/sdp@3.0.3/node_modules/sdp/sdp.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/common_shim.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/adapter_factory.js","../node_modules/.pnpm/webrtc-adapter@8.1.1/node_modules/webrtc-adapter/src/js/adapter_core.js","../src/api/SignalClient.ts","../src/room/PCTransport.ts","../src/room/RTCEngine.ts","../src/room/track/defaults.ts","../src/room/Room.ts","../src/room/track/create.ts","../src/connect.ts"],"sourcesContent":[null,"/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n defaultLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = level;\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n self.setLevel(defaultLevel, false);\n clearPersistedLevel();\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n",null,null,null,null,null,null,null,null,null,"// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n",null,null,null,null,null,null,null,"function r(r,e,n){var i,t,o;void 0===e&&(e=50),void 0===n&&(n={});var a=null!=(i=n.isImmediate)&&i,u=null!=(t=n.callback)&&t,c=n.maxWait,v=Date.now(),l=[];function f(){if(void 0!==c){var r=Date.now()-v;if(r+e>=c)return c-r}return e}var d=function(){var e=[].slice.call(arguments),n=this;return new Promise(function(i,t){var c=a&&void 0===o;if(void 0!==o&&clearTimeout(o),o=setTimeout(function(){if(o=void 0,v=Date.now(),!a){var i=r.apply(n,e);u&&u(i),l.forEach(function(r){return(0,r.resolve)(i)}),l=[]}},f()),c){var d=r.apply(n,e);return u&&u(d),i(d)}l.push({resolve:i,reject:t})})};return d.cancel=function(r){void 0!==o&&clearTimeout(o),l.forEach(function(e){return(0,e.reject)(r)}),l=[]},d}export{r as debounce};\n//# sourceMappingURL=index.esm.js.map\n",null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection &&\n !window.RTCIceGatherer)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n const initParameters = arguments[1];\n const shouldPerformCheck = initParameters &&\n 'sendEncodings' in initParameters;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n initParameters.sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = initParameters.sendEncodings;\n sender.sendEncodings = initParameters.sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substr(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nexport function shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nimport * as utils from './utils';\n\n // Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\nimport * as sdp from 'sdp';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\n",null,null,null,null,null,null,null],"names":["LogLevel","root","definition","this","noop","undefinedType","isIE","window","navigator","test","userAgent","logMethods","bindMethod","obj","methodName","method","bind","Function","prototype","call","e","apply","arguments","traceForIE","console","log","trace","realMethod","undefined","replaceLoggingMethods","level","loggerName","i","length","methodFactory","debug","enableLoggingWhenConsoleArrives","defaultMethodFactory","Logger","name","defaultLevel","factory","self","currentLevel","storageKey","getPersistedLevel","storedLevel","localStorage","ignore","cookie","document","location","indexOf","encodeURIComponent","exec","slice","levels","TRACE","DEBUG","INFO","WARN","ERROR","SILENT","getLevel","setLevel","persist","toUpperCase","persistLevelIfPossible","levelNum","levelName","setDefaultLevel","resetLevel","removeItem","clearPersistedLevel","enableAll","disableAll","initialLevel","defaultLogger","_loggersByName","getLogger","TypeError","logger","_log","noConflict","getLoggers","module","exports","livekitLogger","setLogLevel","info","long","Long","wasm","WebAssembly","Instance","Module","Uint8Array","low","high","unsigned","isLong","__isLong__","Object","defineProperty","value","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","str","radix","Error","RangeError","p","substring","radixToPower","result","size","min","parseInt","power","mul","add","fromValue","val","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","toString","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","other","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","max","floor","approxRem","log2","ceil","LN2","delta","approxRes","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","hi","lo","fromBytes","bytes","fromBytesLE","fromBytesBE","aspromise","fn","ctx","params","Array","offset","index","pending","Promise","resolve","reject","err","base64","string","n","charAt","b64","s64","encode","buffer","start","end","parts","t","chunk","j","b","push","String","fromCharCode","join","invalidEncoding","decode","c","charCodeAt","eventemitter","EventEmitter","_listeners","on","evt","EventEmitter$1","off","listeners","splice","emit","args","float","Float32Array","f32","f8b","writeFloat_f32_cpy","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","round","exponent","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","inquire_1","moduleName","eval","utf8","len","read","write","c1","c2","pool_1","alloc","SIZE","MAX","slab","longbits","LongBits","util","require$$0","zero","zzEncode","zzDecode","zeroHash","from","isString","LongBits$2","toLong","Boolean","fromHash","hash","toHash","mask","part0","part1","part2","merge","dst","src","ifNotSet","keys","newError","CustomError","message","properties","get","captureStackTrace","stack","create","constructor","asPromise","require$$1","require$$2","require$$3","inquire","require$$4","require$$5","pool","require$$6","require$$7","isNode","global","process","versions","node","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","prop","hasOwnProperty","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","lcFirst","toLowerCase","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","json","_configure","encoding","allocUnsafe","Buffer_allocUnsafe","BufferWriter","writer","Writer","Op","next","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","subarray","_push","Writer$1","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","set","fork","reset","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","copy","byteLength","BufferReader","reader","Reader","indexOutOfRange","writeLength","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","Reader$1","_slice","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","request","callback","response","setTimeout","endedByRPC","roots","protobuf","configure","build","rpc","TrackType","TrackSource","VideoQuality","ConnectionQuality","ClientConfigSetting","ParticipantInfo_State","DataPacket_Kind","ClientInfo_SDK","minimal","globalThis","trackTypeFromJSON","object","AUDIO","VIDEO","DATA","UNRECOGNIZED","trackTypeToJSON","trackSourceFromJSON","UNKNOWN","CAMERA","MICROPHONE","SCREEN_SHARE","SCREEN_SHARE_AUDIO","trackSourceToJSON","videoQualityFromJSON","LOW","MEDIUM","HIGH","OFF","videoQualityToJSON","connectionQualityFromJSON","POOR","GOOD","EXCELLENT","clientConfigSettingFromJSON","UNSET","DISABLED","ENABLED","clientConfigSettingToJSON","participantInfo_StateFromJSON","JOINING","JOINED","ACTIVE","DISCONNECTED","dataPacket_KindFromJSON","RELIABLE","LOSSY","clientInfo_SDKFromJSON","JS","SWIFT","ANDROID","FLUTTER","GO","UNITY","_m0","Room","sid","emptyTimeout","maxParticipants","creationTime","turnPassword","v","enabledCodecs","Codec","metadata","numParticipants","activeRecording","input","tag","longToNumber","fromJSON","map","toJSON","fromPartial","_a","_b","_c","_d","_e","_f","_g","_h","_j","_k","mime","fmtpLine","ParticipantPermission","canSubscribe","canPublish","canPublishData","hidden","recorder","ParticipantInfo","identity","state","tracks","TrackInfo","joinedAt","version","permission","region","participantInfo_StateToJSON","type","muted","width","height","simulcast","disableDtx","source","layers","VideoLayer","mimeType","mid","_l","_m","quality","bitrate","ssrc","DataPacket","kind","user","UserPacket","speaker","ActiveSpeakerUpdate","dataPacket_KindToJSON","speakers","SpeakerInfo","active","createBaseUserPacket","participantSid","payload","destinationSids","bytesFromBase64","arr","bin","byte","btoa","base64FromBytes","ParticipantTracks","trackSids","ClientInfo","sdk","protocol","os","osVersion","deviceModel","browser","browserVersion","address","clientInfo_SDKToJSON","ClientConfiguration","video","VideoConfiguration","screen","resumeConnection","hardwareEncoder","atob","MAX_SAFE_INTEGER","SignalTarget","StreamState","signalTargetFromJSON","PUBLISHER","SUBSCRIBER","signalTargetToJSON","streamStateFromJSON","PAUSED","SignalRequest","offer","SessionDescription","answer","trickle","TrickleRequest","addTrack","AddTrackRequest","mute","MuteTrackRequest","subscription","UpdateSubscription","trackSetting","UpdateTrackSettings","leave","LeaveRequest","updateLayers","UpdateVideoLayers","subscriptionPermission","SubscriptionPermission","syncState","SyncState","simulate","SimulateScenario","SignalResponse","JoinResponse","update","ParticipantUpdate","trackPublished","TrackPublishedResponse","speakersChanged","SpeakersChanged","roomUpdate","RoomUpdate","connectionQuality","ConnectionQualityUpdate","streamStateUpdate","StreamStateUpdate","subscribedQualityUpdate","SubscribedQualityUpdate","subscriptionPermissionUpdate","SubscriptionPermissionUpdate","refreshToken","trackUnpublished","TrackUnpublishedResponse","cid","candidateInit","target","room","participant","otherParticipants","serverVersion","iceServers","ICEServer","subscriberPrimary","alternativeUrl","clientConfiguration","serverRegion","track","trackSid","sdp","participants","subscribe","participantTracks","disabled","canReconnect","urls","username","credential","ConnectionQualityInfo","score","connectionQualityToJSON","updates","StreamStateInfo","streamStateToJSON","streamStates","SubscribedQuality","enabled","subscribedQualities","TrackPermission","allTracks","allParticipants","trackPermissions","allowed","publishTracks","dataChannels","DataChannelInfo","label","id","speakerUpdate","nodeFailure","migration","serverLeave","LivekitError","code","ConnectionError","super","TrackInvalidError","UnsupportedServer","UnexpectedConnectionState","MediaDeviceFailure","RoomEvent","ParticipantEvent","EngineEvent","TrackEvent","getFailure","error","NotFound","PermissionDenied","DeviceInUse","Other","monitorFrequency","computeBitrate","currentStats","prevStats","bytesNow","bytesPrev","bytesReceived","bytesSent","timestamp","defaultId","DeviceManager","static","instance","getDevices","requestPermissions","devices","mediaDevices","enumerateDevices","some","device","noLabel","isRelevant","permissionsToAcquire","audio","getUserMedia","filter","deviceId","defaultDevice","groupId","temp","async","find","d","mediaDeviceKinds","sleep","duration","isFireFox","isWeb","isMobile","roDispatchCallback","entries","entry","handleResize","ioDispatchCallback","handleVisibilityChanged","resizeObserver","getResizeObserver","ResizeObserver","intersectionObserver","getIntersectionObserver","IntersectionObserver","rootMargin","emptyMediaStreamTrack","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","init","eventsModule","events","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","m","existing","warning","newListener","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","arg","removeEventListener","enumerable","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","pop","spliceOne","removeAllListeners","key","rawListeners","eventNames","recycledElements","Track","mediaTrack","attachedElements","isMuted","_currentBitrate","appVisibilityChangedListener","handleAppVisibilityChanged","mediaStreamTrack","Source","Unknown","isInBackground","visibilityState","currentBitrate","attach","element","elementType","Kind","Video","forEach","parentElement","createElement","includes","attachToElement","HTMLAudioElement","play","then","AudioPlaybackStarted","catch","AudioPlaybackFailed","ElementAttached","detach","detachTrack","idx","recycleElement","ElementDetached","detached","elm","stop","enable","disable","shouldCache","pause","mediaStream","existingTracks","srcObject","MediaStream","getAudioTracks","getVideoTracks","et","removeTrack","HTMLVideoElement","autoplay","playsInline","getTracks","kindToProto","k","Audio","kindFromProto","sourceToProto","s","Camera","Microphone","ScreenShare","ScreenShareAudio","sourceFromProto","streamStateFromProto","ProtoStreamState","Active","Paused","LocalTrack","constraints","_isUpstreamPaused","handleEnded","reacquireTrack","Ended","getConstraints","wasMuted","dimensions","getSettings","isUpstreamPaused","getInstance","normalizeDeviceId","setTrackMuted","replaceTrack","sender","el","restart","streamConstraints","newTrack","Muted","Unmuted","needsReAcquisition","readyState","UpstreamPaused","canvas","emptyStream","captureStream","getEmptyMediaStreamTrack","UpstreamResumed","mergeDefaultOptions","options","audioDefaults","videoDefaults","opts","mergeObjectWithoutOverwriting","mainObject","objectToMerge","constraintsForOptions","videoOptions","resolution","getNewAudioContext","AudioContext","webkitAudioContext","LocalAudioTrack","stopOnMute","monitorSender","stats","getSenderStats","checkForSilence","setDeviceId","restartTrack","unmute","startMonitor","audioStats","getStats","streamId","packetsSent","packetsLost","roundTripTime","jitter","trackIsSilent","timeOffset","analyser","createAnalyser","fftSize","bufferLength","frequencyBinCount","dataArray","createMediaStreamSource","connect","getByteTimeDomainData","someNoise","sample","close","detectSilence","AudioSilenceDetected","LocalVideoTrack","statsMap","Map","rid","totalBitrate","prev","isSimulcast","getParameters","encodings","signalClient","items","vs","frameHeight","frameWidth","firCount","pliCount","nackCount","framesSent","retransmittedPacketsSent","qualityLimitationReason","qualityLimitationResolutionChanges","r","remoteId","setPublishingQuality","maxQuality","qualities","q","setPublishingLayers","hasChanged","videoQualityForRid","subscribedQuality","scaleResolutionDownBy","maxBitrate","maxFrameRate","setParameters","RemoteTrack","streamState","setMuted","setMediaStream","stream","onremovetrack","monitorReceiver","RemoteAudioTrack","getReceiverStats","elementVolume","setVolume","volume","getVolume","receiverStats","concealedSamples","concealmentEvents","silentConcealedSamples","silentConcealmentEvents","totalAudioEnergy","totalSamplesDuration","debounce","func","waitMilliseconds","timeoutId","isImmediate","maxWait","lastInvokeTime","Date","now","promises","nextInvokeTimeout","timeSinceLastInvocation","debouncedFunction","shouldCallNow","clearTimeout","cancel","reason","RemoteVideoTrack","adaptiveStreamSettings","elementInfos","isIntersecting","elementInfo","visible","visibilityChangedAt","updateVisibility","debouncedHandleResize","updateDimensions","isAdaptiveStream","observe","detachedElements","stopObservingElement","framesDecoded","framesDropped","framesReceived","packetsReceived","unobserve","lastVisibilityChange","reduce","isVisible","lastVisible","VisibilityChanged","maxWidth","maxHeight","pixelDensity","pixelDensityValue","devicePixelRatio","currentElementWidth","clientWidth","currentElementHeight","clientHeight","lastDimensions","VideoDimensionsChanged","TrackPublication","metadataMuted","handleMuted","handleUnmuted","trackName","setTrack","isEnabled","isSubscribed","audioTrack","videoTrack","updateInfo","simulcasted","trackInfo","SubscriptionStatus","LocalTrackPublication","ti","handleTrackEnded","pauseUpstream","resumeUpstream","VideoPreset","maxFramerate","frameRate","aspectRatio","AudioPresets","telephone","speech","music","VideoPresets","h90","h180","h216","h360","h540","h720","h1080","h1440","h2160","qvga","vga","qhd","hd","fhd","VideoPresets43","h120","h240","h480","ScreenSharePresets","h360fps3","h720fps5","h720fps15","h1080fps15","h1080fps30","hd_8","hd_15","fhd_15","fhd_30","Participant","audioLevel","isSpeaking","_connectionQuality","audioTracks","videoTracks","values","getTrack","pub","getTrackByName","isCameraEnabled","isMicrophoneEnabled","isScreenShareEnabled","participantInfo","setMetadata","setPermissions","md","changed","prevMetadata","MetadataChanged","ParticipantMetadataChanged","permissions","setIsSpeaking","speaking","lastSpokeAt","IsSpeakingChanged","setConnectionQuality","prevQuality","ProtoQuality","Excellent","Good","Poor","qualityFromProto","ConnectionQualityChanged","addTrackPublication","publication","TrackMuted","TrackUnmuted","mediaTrackToLocalTrack","presets169","presets43","presetsScreenShare","defaultSimulcastPresets169","defaultSimulcastPresets43","videoRids","computeVideoEncodings","isScreenShare","videoEncoding","screenShareEncoding","useSimulcast","presets","aspect","abs","presetsForResolution","preset","determineAppropriateEncoding","original","midPreset","sortPresets","screenShareSimulcastLayers","defaultSimulcastLayers","videoSimulcastLayers","lowPreset","encodingsFromPresets","computeDefaultScreenShareSimulcastPresets","fromPreset","fps","sort","a","aEnc","bEnc","RemoteTrackPublication","_allowed","currentVideoQuality","handleVisibilityChange","emitTrackUpdate","handleVideoDimensionsChange","videoDimensions","setSubscribed","subscribed","subscriptionStatus","Subscribed","NotAllowed","Unsubscribed","setEnabled","isManualOperationAllowed","setVideoQuality","setVideoDimensions","videoQuality","settings","UpdateSettings","RemoteParticipant","pi","rp","sendUpdateTrackSettings","pt","sendUpdateSubscription","TrackUnsubscribed","audioPublication","addSubscribedMediaTrack","triesLeft","getTrackPublication","startsWith","TrackSubscriptionFailed","TrackSubscribed","hasMetadata","alreadyHasMetadata","validTracks","newTracks","TrackPublished","has","unpublishTrack","sendUnpublish","delete","TrackUnpublished","event","_len","_key","LocalParticipant","engine","pendingPublishing","Set","onTrackUnmuted","onTrackMuted","updateMuteStatus","onTrackUpstreamPaused","onTrackUpstreamResumed","handleSubscribedQualityUpdate","roomOptions","dynacast","handleLocalTrackUnpublished","unpublished","onTrackUnpublish","client","onRemoteMuteChanged","onSubscribedQualityUpdate","onLocalTrackUnpublished","lastCameraError","cameraError","lastMicrophoneError","microphoneError","setCameraEnabled","setTrackEnabled","setMicrophoneEnabled","setScreenShareEnabled","prevPermissions","ParticipantPermissionsChanged","localTrack","createTracks","createScreenTracks","publishTrack","MediaDevicesError","all","audioCaptureDefaults","videoCaptureDefaults","isAudio","trackConstraints","conOrBool","videoConstraints","getDisplayMedia","screenVideo","localTracks","screenAudio","_objectSpread","publishDefaults","MediaStreamTrack","existingPublication","stopMicTrackOnMute","req","dtx","scale","videoLayersFromEncodings","audioBitrate","publisher","transceiverInit","direction","sendEncodings","transceiver","pc","addTransceiver","negotiate","videoCodec","setPreferredCodec","LocalTrackPublished","stopOnUnpublish","getPublicationForTrack","stopLocalTrackOnUnpublish","getSenders","LocalTrackUnpublished","unpublishTracks","publications","data","destination","dest","packet","sendDataPacket","setTrackSubscriptionPermissions","allParticipantsAllowed","participantTrackPermissions","sendUpdateSubscriptionPermissions","perms","allowAll","allowedTrackSids","trackPermissionToProto","RTCRtpSender","cap","getCapabilities","selected","codecs","codec","matchesVideoCodec","sdpFmtpLine","setCodecPreferences","publishedTracksInfo","infos","dataChannelsInfo","getInfo","dc","dataChannelForKind","Queue","queue","running","enqueue","cb","dequeue","isRunning","isEmpty","logDisabled_","deprecationWarnings_","extractVersion","uastring","expr","match","wrapPeerConnectionEvent","eventNameToWrap","wrapper","RTCPeerConnection","proto","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","configurable","disableLog","disableWarnings","deprecated","oldMethod","newMethod","detectBrowser","mozGetUserMedia","webkitGetUserMedia","isSecureContext","webkitRTCPeerConnection","RTCIceGatherer","supportsUnifiedPlan","RTCRtpTransceiver","compactObject","accumulator","isObj","isEmptyObject","assign","walkStats","base","resultSet","endsWith","filterStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","trackId","logging","utils","shimGetUserMedia","browserDetails","constraintsToChrome_","mandatory","optional","cc","ideal","exact","oldname_","prefix","oc","mix","advanced","shimConstraints_","JSON","parse","stringify","remap","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","dev","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","onSuccess","onError","origGetUserMedia","cs","DOMException","shimMediaStream","webkitMediaStream","shimOnTrack","_ontrack","f","origSetRemoteDescription","setRemoteDescription","_ontrackpoly","te","getReceivers","Event","streams","dispatchEvent","shimGetSendersWithDtmf","shimSenderWithDtmf","dtmf","_dtmf","createDTMFSender","_pc","_senders","origAddTrack","origRemoveTrack","origAddStream","addStream","origRemoveStream","removeStream","origGetSenders","senders","shimGetStats","origGetStats","selector","onSucc","onErr","fixChromeStats_","standardReport","report","standardStats","localcandidate","remotecandidate","names","stat","makeMapStats","successCallbackWrapper_","shimSenderReceiverGetStats","RTCRtpReceiver","origGetReceivers","receivers","srcElement","shimAddTrackRemoveTrackWithNative","getLocalStreams","_shimmedLocalStreams","existingSenders","newSenders","newSender","shimAddTrackRemoveTrack","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","replaceInternalStreamId","description","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","replaceExternalStreamId","signalingState","alreadyExists","oldStream","nativeMethod","methodObj","desc","origSetLocalDescription","setLocalDescription","origLocalDescription","getOwnPropertyDescriptor","streamid","shimPeerConnection","RTCIceCandidate","fixNegotiationNeeded","getConfiguration","sdpSemantics","getSourceId","sourceId","widthSpecified","heightSpecified","frameRateSpecified","chromeMediaSource","chromeMediaSourceId","nativeGetUserMedia","nativeGetSettings","applyConstraints","nativeApplyConstraints","RTCTrackEvent","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","DataChannel","RTCDataChannel","shimAddTransceiver","origAddTransceiver","setParametersPromises","initParameters","shouldPerformCheck","encodingParam","parseFloat","shimGetParameters","origGetParameters","shimCreateOffer","origCreateOffer","createOffer","finally","shimCreateAnswer","origCreateAnswer","createAnswer","preferredMediaSource","mediaSource","shimLocalStreamsAPI","_localStreams","_addTrack","shimRemoteStreamsAPI","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","shimCallbacksAPI","addIceCandidate","successCallback","failureCallback","promise","withCallback","candidate","_getUserMedia","shimConstraints","errcb","shimRTCIceServerUrls","OrigPeerConnection","pcConfig","pcConstraints","newIceServers","server","url","generateCertificate","shimTrackEventTransceiver","shimCreateOfferLegacy","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","setDirection","offerToReceiveVideo","videoTransceiver","shimAudioContext","SDPUtils","random","substr","localCName","generateIdentifier","splitLines","blob","trim","split","line","splitSections","part","getDescription","sections","getMediaSections","matchPrefix","parseCandidate","foundation","component","priority","ip","port","relatedAddress","relatedPort","tcpType","ufrag","usernameFragment","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","preferredPayloadType","parseExtmap","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mediaSection","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","caps","maxptime","extension","parseRtpEncodingParameters","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","parseMLine","maxSizeLine","maxMessageSize","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","sctp","output","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","sessionId","getDirection","getKind","isRejected","parseOLine","sessionVersion","netType","addressType","isValidSDP","shimRTCIceCandidate","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","augmentedCandidate","sdpMid","sdpMLineIndex","writable","shimMaxMessageSize","_sctp","sctpInDescription","mLine","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","isFirefox","canSendMMS","remoteMMS","POSITIVE_INFINITY","shimSendThrowTypeError","wrapDcSend","origDataChannelSend","send","origCreateDataChannel","createDataChannel","dataChannel","channel","shimConnectionState","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","removeExtmapAllowMixed","nativeSRD","shimAddIceCandidateNullOrEmpty","nativeAddIceCandidate","shimParameterlessSetLocalDescription","nativeSetLocalDescription","shimChrome","shimFirefox","shimSafari","adapter","commonShim","chromeShim","browserShim","firefoxShim","safariShim","adapterFactory","passThroughQueueSignals","SignalClient","useJSON","isConnected","isReconnecting","requestQueue","token","autoSubscribe","publishOnly","adaptiveStream","reconnect","clientInfo","URLSearchParams","createConnectionParams","ws","WebSocket","binaryType","onerror","handleWSError","ev","resp","fetch","ok","msg","text","onopen","onmessage","ArrayBuffer","signalLatency","handleSignalResponse","onclose","onClose","sendOffer","sendRequest","toProtoSessionDescription","sendAnswer","sendIceCandidate","sendMuteTrack","sendAddTrack","sendSyncState","sync","sendUpdateVideoLayers","sendSimulateScenario","scenario","sendLeave","canQueue","canPass","canPassThroughQueue","sd","fromProtoSessionDescription","onAnswer","onOffer","onTrickle","onParticipantUpdate","onLocalTrackPublished","onSpeakersChanged","onLeave","onRoomUpdate","onConnectionQuality","onStreamStateUpdate","onSubscriptionPermissionUpdate","onTokenRefresh","setReconnected","run","rsd","PCTransport","config","pendingCandidates","restartingIce","renegotiate","createAndSendOffer","isICEConnected","remoteDescription","iceRestart","currentSD","lossyDataChannel","reliableDataChannel","maxICEConnectTimeout","PCState","RTCEngine","rtcConfig","pcState","New","isClosed","pendingTrackResolvers","hasPublished","reconnectAttempts","reconnectStart","fullReconnectOnNext","handleDataChannel","_ref","reliableDCSub","lossyDCSub","handleDataMessage","Blob","arrayBuffer","dp","ActiveSpeakersUpdate","DataPacketReceived","handleDataError","channelKind","currentTarget","maxRetransmits","ErrorEvent","handleDisconnect","connection","delay","restartConnection","recoverable","SignalReconnectError","maxReconnectRetries","Disconnected","signalOpts","joinResponse","subscriber","dataSubscriberReadyState","connectedServerAddress","connectedServerAddr","rtcIceServers","iceServer","rtcIceServer","continualGatheringPolicy","TransportsCreated","onicecandidate","primaryPC","ondatachannel","onconnectionstatechange","getConnectedAddress","shouldEmit","Connected","ontrack","MediaTrackAdded","onaddstream","lossyDC","ordered","reliableDC","RTCSdpType","Restarting","waitForPCConnected","Restarted","Resuming","SignalResumed","Resumed","startTime","Reconnecting","ensurePublisherConnected","targetChannel","endTime","getTime","selectedCandidatePairId","candidatePairs","candidates","selectedID","remoteCandidateId","autoGainControl","channelCount","echoCancellation","noiseSuppression","RoomState","_this","activeSpeakers","audioEnabled","createEngine","acquireAudioContext","connOptions","localParticipant","getOrCreateParticipant","StateChanged","connectTimeout","onBeforeUnload","handleDeviceChange","disconnect","stopTracks","handleRestarting","handleParticipantDisconnected","handleRestarted","Reconnected","handleParticipantUpdates","localPubs","participantInfos","remoteParticipant","isNewParticipant","ParticipantConnected","handleActiveSpeakersUpdate","seenSids","ActiveSpeakersChanged","handleSpeakersChanged","speakerUpdates","lastSpeakers","handleStreamStateUpdate","TrackStreamStateChanged","handleSubscriptionPermissionUpdate","TrackSubscriptionPermissionChanged","handleDataPacket","userPacket","DataReceived","handleAudioPlaybackStarted","canPlaybackAudio","AudioPlaybackStatusChanged","handleAudioPlaybackFailed","MediaDevicesChanged","handleRoomUpdate","RoomMetadataChanged","handleConnectionQualityUpdate","expSignalLatency","onTrackAdded","updateSubscriptions","getLocalDevices","getParticipantByIdentity","simulateScenario","elements","setSinkId","packed","unpackStreamId","participantId","shouldStopTracks","clear","audioContext","ParticipantDisconnected","createParticipant","fromParticipantInfo","trackPublication","localDescription","previousSdp","sendUnsub","createLocalTracks","autoManageVideo","logLevel","publishAudio","publishVideo","enableCameraAndMicrophone","errKind","audioErr","originalFactory","rawMethod","configLevel","needLog","silent"],"mappings":"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"}
1
+ {"version":3,"file":"livekit-client.umd.js","sources":["../src/logger.ts","../node_modules/loglevel/lib/loglevel.js","../node_modules/long/src/long.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/protobufjs/minimal.js","../src/proto/livekit_models.ts","../src/proto/google/protobuf/timestamp.ts","../src/proto/livekit_rtc.ts","../src/room/errors.ts","../src/room/events.ts","../src/room/stats.ts","../src/room/DeviceManager.ts","../src/version.ts","../src/room/utils.ts","../node_modules/events/events.js","../src/room/track/Track.ts","../src/room/track/LocalTrack.ts","../src/room/track/utils.ts","../src/room/track/LocalAudioTrack.ts","../src/room/track/LocalVideoTrack.ts","../src/room/track/RemoteTrack.ts","../src/room/track/RemoteAudioTrack.ts","../node_modules/ts-debounce/dist/src/index.esm.js","../src/room/track/RemoteVideoTrack.ts","../src/room/track/TrackPublication.ts","../src/room/track/LocalTrackPublication.ts","../src/room/track/options.ts","../src/room/participant/Participant.ts","../src/room/participant/publishUtils.ts","../src/room/track/RemoteTrackPublication.ts","../src/room/participant/RemoteParticipant.ts","../src/room/participant/LocalParticipant.ts","../src/room/participant/ParticipantTrackPermission.ts","../src/api/RequestQueue.ts","../node_modules/webrtc-adapter/src/js/utils.js","../node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","../node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","../node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","../node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","../node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","../node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","../node_modules/webrtc-adapter/src/js/safari/safari_shim.js","../node_modules/sdp/sdp.js","../node_modules/webrtc-adapter/src/js/common_shim.js","../node_modules/webrtc-adapter/src/js/adapter_factory.js","../node_modules/webrtc-adapter/src/js/adapter_core.js","../src/api/SignalClient.ts","../src/room/PCTransport.ts","../src/room/RTCEngine.ts","../src/room/track/defaults.ts","../src/room/Room.ts","../src/room/track/create.ts","../src/connect.ts"],"sourcesContent":["import * as log from 'loglevel';\n\nexport enum LogLevel {\n trace = 0,\n debug = 1,\n info = 2,\n warn = 3,\n error = 4,\n silent = 5,\n}\n\ntype LogLevelString = keyof typeof LogLevel;\n\ntype StructuredLogger = {\n trace: (msg: string, context?: object) => void;\n debug: (msg: string, context?: object) => void;\n info: (msg: string, context?: object) => void;\n warn: (msg: string, context?: object) => void;\n error: (msg: string, context?: object) => void;\n};\n\nconst livekitLogger = log.getLogger('livekit');\n\nlivekitLogger.setLevel(LogLevel.info);\n\nexport default livekitLogger as StructuredLogger;\n\nexport function setLogLevel(level: LogLevel | LogLevelString) {\n livekitLogger.setLevel(level);\n}\n\nexport type LogExtension = (level: LogLevel, msg: string, context?: object) => void;\n\n/**\n * use this to hook into the logging function to allow sending internal livekit logs to third party services\n * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)\n */\nexport function setLogExtension(extension: LogExtension) {\n const originalFactory = livekitLogger.methodFactory;\n\n livekitLogger.methodFactory = (methodName, logLevel, loggerName) => {\n const rawMethod = originalFactory(methodName, logLevel, loggerName);\n\n const configLevel = livekitLogger.getLevel();\n const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;\n\n return (msg, context?: [msg: string, context: object]) => {\n if (context) rawMethod(msg, context);\n else rawMethod(msg);\n if (needLog) {\n extension(logLevel, msg, context);\n }\n };\n };\n livekitLogger.setLevel(livekitLogger.getLevel()); // Be sure to call setLevel method in order to apply plugin\n}\n","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n defaultLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = level;\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n self.setLevel(defaultLevel, false);\n clearPersistedLevel();\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/* eslint-disable */\nimport Long from 'long';\nimport * as _m0 from 'protobufjs/minimal';\nimport { Timestamp } from './google/protobuf/timestamp';\n\nexport const protobufPackage = 'livekit';\n\nexport enum TrackType {\n AUDIO = 0,\n VIDEO = 1,\n DATA = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function trackTypeFromJSON(object: any): TrackType {\n switch (object) {\n case 0:\n case 'AUDIO':\n return TrackType.AUDIO;\n case 1:\n case 'VIDEO':\n return TrackType.VIDEO;\n case 2:\n case 'DATA':\n return TrackType.DATA;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return TrackType.UNRECOGNIZED;\n }\n}\n\nexport function trackTypeToJSON(object: TrackType): string {\n switch (object) {\n case TrackType.AUDIO:\n return 'AUDIO';\n case TrackType.VIDEO:\n return 'VIDEO';\n case TrackType.DATA:\n return 'DATA';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport enum TrackSource {\n UNKNOWN = 0,\n CAMERA = 1,\n MICROPHONE = 2,\n SCREEN_SHARE = 3,\n SCREEN_SHARE_AUDIO = 4,\n UNRECOGNIZED = -1,\n}\n\nexport function trackSourceFromJSON(object: any): TrackSource {\n switch (object) {\n case 0:\n case 'UNKNOWN':\n return TrackSource.UNKNOWN;\n case 1:\n case 'CAMERA':\n return TrackSource.CAMERA;\n case 2:\n case 'MICROPHONE':\n return TrackSource.MICROPHONE;\n case 3:\n case 'SCREEN_SHARE':\n return TrackSource.SCREEN_SHARE;\n case 4:\n case 'SCREEN_SHARE_AUDIO':\n return TrackSource.SCREEN_SHARE_AUDIO;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return TrackSource.UNRECOGNIZED;\n }\n}\n\nexport function trackSourceToJSON(object: TrackSource): string {\n switch (object) {\n case TrackSource.UNKNOWN:\n return 'UNKNOWN';\n case TrackSource.CAMERA:\n return 'CAMERA';\n case TrackSource.MICROPHONE:\n return 'MICROPHONE';\n case TrackSource.SCREEN_SHARE:\n return 'SCREEN_SHARE';\n case TrackSource.SCREEN_SHARE_AUDIO:\n return 'SCREEN_SHARE_AUDIO';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport enum VideoQuality {\n LOW = 0,\n MEDIUM = 1,\n HIGH = 2,\n OFF = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function videoQualityFromJSON(object: any): VideoQuality {\n switch (object) {\n case 0:\n case 'LOW':\n return VideoQuality.LOW;\n case 1:\n case 'MEDIUM':\n return VideoQuality.MEDIUM;\n case 2:\n case 'HIGH':\n return VideoQuality.HIGH;\n case 3:\n case 'OFF':\n return VideoQuality.OFF;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return VideoQuality.UNRECOGNIZED;\n }\n}\n\nexport function videoQualityToJSON(object: VideoQuality): string {\n switch (object) {\n case VideoQuality.LOW:\n return 'LOW';\n case VideoQuality.MEDIUM:\n return 'MEDIUM';\n case VideoQuality.HIGH:\n return 'HIGH';\n case VideoQuality.OFF:\n return 'OFF';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport enum ConnectionQuality {\n POOR = 0,\n GOOD = 1,\n EXCELLENT = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function connectionQualityFromJSON(object: any): ConnectionQuality {\n switch (object) {\n case 0:\n case 'POOR':\n return ConnectionQuality.POOR;\n case 1:\n case 'GOOD':\n return ConnectionQuality.GOOD;\n case 2:\n case 'EXCELLENT':\n return ConnectionQuality.EXCELLENT;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return ConnectionQuality.UNRECOGNIZED;\n }\n}\n\nexport function connectionQualityToJSON(object: ConnectionQuality): string {\n switch (object) {\n case ConnectionQuality.POOR:\n return 'POOR';\n case ConnectionQuality.GOOD:\n return 'GOOD';\n case ConnectionQuality.EXCELLENT:\n return 'EXCELLENT';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport enum ClientConfigSetting {\n UNSET = 0,\n DISABLED = 1,\n ENABLED = 2,\n UNRECOGNIZED = -1,\n}\n\nexport function clientConfigSettingFromJSON(object: any): ClientConfigSetting {\n switch (object) {\n case 0:\n case 'UNSET':\n return ClientConfigSetting.UNSET;\n case 1:\n case 'DISABLED':\n return ClientConfigSetting.DISABLED;\n case 2:\n case 'ENABLED':\n return ClientConfigSetting.ENABLED;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return ClientConfigSetting.UNRECOGNIZED;\n }\n}\n\nexport function clientConfigSettingToJSON(object: ClientConfigSetting): string {\n switch (object) {\n case ClientConfigSetting.UNSET:\n return 'UNSET';\n case ClientConfigSetting.DISABLED:\n return 'DISABLED';\n case ClientConfigSetting.ENABLED:\n return 'ENABLED';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport interface Room {\n sid: string;\n name: string;\n emptyTimeout: number;\n maxParticipants: number;\n creationTime: number;\n turnPassword: string;\n enabledCodecs: Codec[];\n metadata: string;\n numParticipants: number;\n activeRecording: boolean;\n}\n\nexport interface Codec {\n mime: string;\n fmtpLine: string;\n}\n\nexport interface ParticipantPermission {\n /** allow participant to subscribe to other tracks in the room */\n canSubscribe: boolean;\n /** allow participant to publish new tracks to room */\n canPublish: boolean;\n /** allow participant to publish data */\n canPublishData: boolean;\n /** indicates that it's hidden to others */\n hidden: boolean;\n /** indicates it's a recorder instance */\n recorder: boolean;\n}\n\nexport interface ParticipantInfo {\n sid: string;\n identity: string;\n state: ParticipantInfo_State;\n tracks: TrackInfo[];\n metadata: string;\n /** timestamp when participant joined room, in seconds */\n joinedAt: number;\n name: string;\n version: number;\n permission?: ParticipantPermission;\n region: string;\n /**\n * indicates the participant has an active publisher connection\n * and can publish to the server\n */\n isPublisher: boolean;\n}\n\nexport enum ParticipantInfo_State {\n /** JOINING - websocket' connected, but not offered yet */\n JOINING = 0,\n /** JOINED - server received client offer */\n JOINED = 1,\n /** ACTIVE - ICE connectivity established */\n ACTIVE = 2,\n /** DISCONNECTED - WS disconnected */\n DISCONNECTED = 3,\n UNRECOGNIZED = -1,\n}\n\nexport function participantInfo_StateFromJSON(object: any): ParticipantInfo_State {\n switch (object) {\n case 0:\n case 'JOINING':\n return ParticipantInfo_State.JOINING;\n case 1:\n case 'JOINED':\n return ParticipantInfo_State.JOINED;\n case 2:\n case 'ACTIVE':\n return ParticipantInfo_State.ACTIVE;\n case 3:\n case 'DISCONNECTED':\n return ParticipantInfo_State.DISCONNECTED;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return ParticipantInfo_State.UNRECOGNIZED;\n }\n}\n\nexport function participantInfo_StateToJSON(object: ParticipantInfo_State): string {\n switch (object) {\n case ParticipantInfo_State.JOINING:\n return 'JOINING';\n case ParticipantInfo_State.JOINED:\n return 'JOINED';\n case ParticipantInfo_State.ACTIVE:\n return 'ACTIVE';\n case ParticipantInfo_State.DISCONNECTED:\n return 'DISCONNECTED';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport interface TrackInfo {\n sid: string;\n type: TrackType;\n name: string;\n muted: boolean;\n /**\n * original width of video (unset for audio)\n * clients may receive a lower resolution version with simulcast\n */\n width: number;\n /** original height of video (unset for audio) */\n height: number;\n /** true if track is simulcasted */\n simulcast: boolean;\n /** true if DTX (Discontinuous Transmission) is disabled for audio */\n disableDtx: boolean;\n /** source of media */\n source: TrackSource;\n layers: VideoLayer[];\n /** mime type of codec */\n mimeType: string;\n mid: string;\n}\n\n/** provide information about available spatial layers */\nexport interface VideoLayer {\n /** for tracks with a single layer, this should be HIGH */\n quality: VideoQuality;\n width: number;\n height: number;\n /** target bitrate, server will measure actual */\n bitrate: number;\n ssrc: number;\n}\n\n/** new DataPacket API */\nexport interface DataPacket {\n kind: DataPacket_Kind;\n user?: UserPacket | undefined;\n speaker?: ActiveSpeakerUpdate | undefined;\n}\n\nexport enum DataPacket_Kind {\n RELIABLE = 0,\n LOSSY = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function dataPacket_KindFromJSON(object: any): DataPacket_Kind {\n switch (object) {\n case 0:\n case 'RELIABLE':\n return DataPacket_Kind.RELIABLE;\n case 1:\n case 'LOSSY':\n return DataPacket_Kind.LOSSY;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return DataPacket_Kind.UNRECOGNIZED;\n }\n}\n\nexport function dataPacket_KindToJSON(object: DataPacket_Kind): string {\n switch (object) {\n case DataPacket_Kind.RELIABLE:\n return 'RELIABLE';\n case DataPacket_Kind.LOSSY:\n return 'LOSSY';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport interface ActiveSpeakerUpdate {\n speakers: SpeakerInfo[];\n}\n\nexport interface SpeakerInfo {\n sid: string;\n /** audio level, 0-1.0, 1 is loudest */\n level: number;\n /** true if speaker is currently active */\n active: boolean;\n}\n\nexport interface UserPacket {\n /** participant ID of user that sent the message */\n participantSid: string;\n /** user defined payload */\n payload: Uint8Array;\n /** the ID of the participants who will receive the message (the message will be sent to all the people in the room if this variable is empty) */\n destinationSids: string[];\n}\n\nexport interface ParticipantTracks {\n /** participant ID of participant to whom the tracks belong */\n participantSid: string;\n trackSids: string[];\n}\n\n/** details about the client */\nexport interface ClientInfo {\n sdk: ClientInfo_SDK;\n version: string;\n protocol: number;\n os: string;\n osVersion: string;\n deviceModel: string;\n browser: string;\n browserVersion: string;\n address: string;\n}\n\nexport enum ClientInfo_SDK {\n UNKNOWN = 0,\n JS = 1,\n SWIFT = 2,\n ANDROID = 3,\n FLUTTER = 4,\n GO = 5,\n UNITY = 6,\n UNRECOGNIZED = -1,\n}\n\nexport function clientInfo_SDKFromJSON(object: any): ClientInfo_SDK {\n switch (object) {\n case 0:\n case 'UNKNOWN':\n return ClientInfo_SDK.UNKNOWN;\n case 1:\n case 'JS':\n return ClientInfo_SDK.JS;\n case 2:\n case 'SWIFT':\n return ClientInfo_SDK.SWIFT;\n case 3:\n case 'ANDROID':\n return ClientInfo_SDK.ANDROID;\n case 4:\n case 'FLUTTER':\n return ClientInfo_SDK.FLUTTER;\n case 5:\n case 'GO':\n return ClientInfo_SDK.GO;\n case 6:\n case 'UNITY':\n return ClientInfo_SDK.UNITY;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return ClientInfo_SDK.UNRECOGNIZED;\n }\n}\n\nexport function clientInfo_SDKToJSON(object: ClientInfo_SDK): string {\n switch (object) {\n case ClientInfo_SDK.UNKNOWN:\n return 'UNKNOWN';\n case ClientInfo_SDK.JS:\n return 'JS';\n case ClientInfo_SDK.SWIFT:\n return 'SWIFT';\n case ClientInfo_SDK.ANDROID:\n return 'ANDROID';\n case ClientInfo_SDK.FLUTTER:\n return 'FLUTTER';\n case ClientInfo_SDK.GO:\n return 'GO';\n case ClientInfo_SDK.UNITY:\n return 'UNITY';\n default:\n return 'UNKNOWN';\n }\n}\n\n/** server provided client configuration */\nexport interface ClientConfiguration {\n video?: VideoConfiguration;\n screen?: VideoConfiguration;\n resumeConnection: ClientConfigSetting;\n}\n\nexport interface VideoConfiguration {\n hardwareEncoder: ClientConfigSetting;\n}\n\nexport interface RTPStats {\n startTime?: Date;\n endTime?: Date;\n duration: number;\n packets: number;\n packetRate: number;\n bytes: number;\n bitrate: number;\n packetsLost: number;\n packetLossRate: number;\n packetLossPercentage: number;\n packetsDuplicate: number;\n packetDuplicateRate: number;\n bytesDuplicate: number;\n bitrateDuplicate: number;\n packetsPadding: number;\n packetPaddingRate: number;\n bytesPadding: number;\n bitratePadding: number;\n packetsOutOfOrder: number;\n frames: number;\n frameRate: number;\n jitterCurrent: number;\n jitterMax: number;\n gapHistogram: { [key: number]: number };\n nacks: number;\n nackMisses: number;\n plis: number;\n lastPli?: Date;\n firs: number;\n lastFir?: Date;\n rttCurrent: number;\n rttMax: number;\n keyFrames: number;\n lastKeyFrame?: Date;\n layerLockPlis: number;\n lastLayerLockPli?: Date;\n}\n\nexport interface RTPStats_GapHistogramEntry {\n key: number;\n value: number;\n}\n\nfunction createBaseRoom(): Room {\n return {\n sid: '',\n name: '',\n emptyTimeout: 0,\n maxParticipants: 0,\n creationTime: 0,\n turnPassword: '',\n enabledCodecs: [],\n metadata: '',\n numParticipants: 0,\n activeRecording: false,\n };\n}\n\nexport const Room = {\n encode(message: Room, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.sid !== '') {\n writer.uint32(10).string(message.sid);\n }\n if (message.name !== '') {\n writer.uint32(18).string(message.name);\n }\n if (message.emptyTimeout !== 0) {\n writer.uint32(24).uint32(message.emptyTimeout);\n }\n if (message.maxParticipants !== 0) {\n writer.uint32(32).uint32(message.maxParticipants);\n }\n if (message.creationTime !== 0) {\n writer.uint32(40).int64(message.creationTime);\n }\n if (message.turnPassword !== '') {\n writer.uint32(50).string(message.turnPassword);\n }\n for (const v of message.enabledCodecs) {\n Codec.encode(v!, writer.uint32(58).fork()).ldelim();\n }\n if (message.metadata !== '') {\n writer.uint32(66).string(message.metadata);\n }\n if (message.numParticipants !== 0) {\n writer.uint32(72).uint32(message.numParticipants);\n }\n if (message.activeRecording === true) {\n writer.uint32(80).bool(message.activeRecording);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Room {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRoom();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.sid = reader.string();\n break;\n case 2:\n message.name = reader.string();\n break;\n case 3:\n message.emptyTimeout = reader.uint32();\n break;\n case 4:\n message.maxParticipants = reader.uint32();\n break;\n case 5:\n message.creationTime = longToNumber(reader.int64() as Long);\n break;\n case 6:\n message.turnPassword = reader.string();\n break;\n case 7:\n message.enabledCodecs.push(Codec.decode(reader, reader.uint32()));\n break;\n case 8:\n message.metadata = reader.string();\n break;\n case 9:\n message.numParticipants = reader.uint32();\n break;\n case 10:\n message.activeRecording = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): Room {\n return {\n sid: isSet(object.sid) ? String(object.sid) : '',\n name: isSet(object.name) ? String(object.name) : '',\n emptyTimeout: isSet(object.emptyTimeout) ? Number(object.emptyTimeout) : 0,\n maxParticipants: isSet(object.maxParticipants) ? Number(object.maxParticipants) : 0,\n creationTime: isSet(object.creationTime) ? Number(object.creationTime) : 0,\n turnPassword: isSet(object.turnPassword) ? String(object.turnPassword) : '',\n enabledCodecs: Array.isArray(object?.enabledCodecs)\n ? object.enabledCodecs.map((e: any) => Codec.fromJSON(e))\n : [],\n metadata: isSet(object.metadata) ? String(object.metadata) : '',\n numParticipants: isSet(object.numParticipants) ? Number(object.numParticipants) : 0,\n activeRecording: isSet(object.activeRecording) ? Boolean(object.activeRecording) : false,\n };\n },\n\n toJSON(message: Room): unknown {\n const obj: any = {};\n message.sid !== undefined && (obj.sid = message.sid);\n message.name !== undefined && (obj.name = message.name);\n message.emptyTimeout !== undefined && (obj.emptyTimeout = Math.round(message.emptyTimeout));\n message.maxParticipants !== undefined &&\n (obj.maxParticipants = Math.round(message.maxParticipants));\n message.creationTime !== undefined && (obj.creationTime = Math.round(message.creationTime));\n message.turnPassword !== undefined && (obj.turnPassword = message.turnPassword);\n if (message.enabledCodecs) {\n obj.enabledCodecs = message.enabledCodecs.map((e) => (e ? Codec.toJSON(e) : undefined));\n } else {\n obj.enabledCodecs = [];\n }\n message.metadata !== undefined && (obj.metadata = message.metadata);\n message.numParticipants !== undefined &&\n (obj.numParticipants = Math.round(message.numParticipants));\n message.activeRecording !== undefined && (obj.activeRecording = message.activeRecording);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<Room>, I>>(object: I): Room {\n const message = createBaseRoom();\n message.sid = object.sid ?? '';\n message.name = object.name ?? '';\n message.emptyTimeout = object.emptyTimeout ?? 0;\n message.maxParticipants = object.maxParticipants ?? 0;\n message.creationTime = object.creationTime ?? 0;\n message.turnPassword = object.turnPassword ?? '';\n message.enabledCodecs = object.enabledCodecs?.map((e) => Codec.fromPartial(e)) || [];\n message.metadata = object.metadata ?? '';\n message.numParticipants = object.numParticipants ?? 0;\n message.activeRecording = object.activeRecording ?? false;\n return message;\n },\n};\n\nfunction createBaseCodec(): Codec {\n return { mime: '', fmtpLine: '' };\n}\n\nexport const Codec = {\n encode(message: Codec, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.mime !== '') {\n writer.uint32(10).string(message.mime);\n }\n if (message.fmtpLine !== '') {\n writer.uint32(18).string(message.fmtpLine);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Codec {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseCodec();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.mime = reader.string();\n break;\n case 2:\n message.fmtpLine = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): Codec {\n return {\n mime: isSet(object.mime) ? String(object.mime) : '',\n fmtpLine: isSet(object.fmtpLine) ? String(object.fmtpLine) : '',\n };\n },\n\n toJSON(message: Codec): unknown {\n const obj: any = {};\n message.mime !== undefined && (obj.mime = message.mime);\n message.fmtpLine !== undefined && (obj.fmtpLine = message.fmtpLine);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<Codec>, I>>(object: I): Codec {\n const message = createBaseCodec();\n message.mime = object.mime ?? '';\n message.fmtpLine = object.fmtpLine ?? '';\n return message;\n },\n};\n\nfunction createBaseParticipantPermission(): ParticipantPermission {\n return {\n canSubscribe: false,\n canPublish: false,\n canPublishData: false,\n hidden: false,\n recorder: false,\n };\n}\n\nexport const ParticipantPermission = {\n encode(message: ParticipantPermission, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.canSubscribe === true) {\n writer.uint32(8).bool(message.canSubscribe);\n }\n if (message.canPublish === true) {\n writer.uint32(16).bool(message.canPublish);\n }\n if (message.canPublishData === true) {\n writer.uint32(24).bool(message.canPublishData);\n }\n if (message.hidden === true) {\n writer.uint32(56).bool(message.hidden);\n }\n if (message.recorder === true) {\n writer.uint32(64).bool(message.recorder);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantPermission {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseParticipantPermission();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.canSubscribe = reader.bool();\n break;\n case 2:\n message.canPublish = reader.bool();\n break;\n case 3:\n message.canPublishData = reader.bool();\n break;\n case 7:\n message.hidden = reader.bool();\n break;\n case 8:\n message.recorder = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ParticipantPermission {\n return {\n canSubscribe: isSet(object.canSubscribe) ? Boolean(object.canSubscribe) : false,\n canPublish: isSet(object.canPublish) ? Boolean(object.canPublish) : false,\n canPublishData: isSet(object.canPublishData) ? Boolean(object.canPublishData) : false,\n hidden: isSet(object.hidden) ? Boolean(object.hidden) : false,\n recorder: isSet(object.recorder) ? Boolean(object.recorder) : false,\n };\n },\n\n toJSON(message: ParticipantPermission): unknown {\n const obj: any = {};\n message.canSubscribe !== undefined && (obj.canSubscribe = message.canSubscribe);\n message.canPublish !== undefined && (obj.canPublish = message.canPublish);\n message.canPublishData !== undefined && (obj.canPublishData = message.canPublishData);\n message.hidden !== undefined && (obj.hidden = message.hidden);\n message.recorder !== undefined && (obj.recorder = message.recorder);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ParticipantPermission>, I>>(\n object: I,\n ): ParticipantPermission {\n const message = createBaseParticipantPermission();\n message.canSubscribe = object.canSubscribe ?? false;\n message.canPublish = object.canPublish ?? false;\n message.canPublishData = object.canPublishData ?? false;\n message.hidden = object.hidden ?? false;\n message.recorder = object.recorder ?? false;\n return message;\n },\n};\n\nfunction createBaseParticipantInfo(): ParticipantInfo {\n return {\n sid: '',\n identity: '',\n state: 0,\n tracks: [],\n metadata: '',\n joinedAt: 0,\n name: '',\n version: 0,\n permission: undefined,\n region: '',\n isPublisher: false,\n };\n}\n\nexport const ParticipantInfo = {\n encode(message: ParticipantInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.sid !== '') {\n writer.uint32(10).string(message.sid);\n }\n if (message.identity !== '') {\n writer.uint32(18).string(message.identity);\n }\n if (message.state !== 0) {\n writer.uint32(24).int32(message.state);\n }\n for (const v of message.tracks) {\n TrackInfo.encode(v!, writer.uint32(34).fork()).ldelim();\n }\n if (message.metadata !== '') {\n writer.uint32(42).string(message.metadata);\n }\n if (message.joinedAt !== 0) {\n writer.uint32(48).int64(message.joinedAt);\n }\n if (message.name !== '') {\n writer.uint32(74).string(message.name);\n }\n if (message.version !== 0) {\n writer.uint32(80).uint32(message.version);\n }\n if (message.permission !== undefined) {\n ParticipantPermission.encode(message.permission, writer.uint32(90).fork()).ldelim();\n }\n if (message.region !== '') {\n writer.uint32(98).string(message.region);\n }\n if (message.isPublisher === true) {\n writer.uint32(104).bool(message.isPublisher);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseParticipantInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.sid = reader.string();\n break;\n case 2:\n message.identity = reader.string();\n break;\n case 3:\n message.state = reader.int32() as any;\n break;\n case 4:\n message.tracks.push(TrackInfo.decode(reader, reader.uint32()));\n break;\n case 5:\n message.metadata = reader.string();\n break;\n case 6:\n message.joinedAt = longToNumber(reader.int64() as Long);\n break;\n case 9:\n message.name = reader.string();\n break;\n case 10:\n message.version = reader.uint32();\n break;\n case 11:\n message.permission = ParticipantPermission.decode(reader, reader.uint32());\n break;\n case 12:\n message.region = reader.string();\n break;\n case 13:\n message.isPublisher = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ParticipantInfo {\n return {\n sid: isSet(object.sid) ? String(object.sid) : '',\n identity: isSet(object.identity) ? String(object.identity) : '',\n state: isSet(object.state) ? participantInfo_StateFromJSON(object.state) : 0,\n tracks: Array.isArray(object?.tracks)\n ? object.tracks.map((e: any) => TrackInfo.fromJSON(e))\n : [],\n metadata: isSet(object.metadata) ? String(object.metadata) : '',\n joinedAt: isSet(object.joinedAt) ? Number(object.joinedAt) : 0,\n name: isSet(object.name) ? String(object.name) : '',\n version: isSet(object.version) ? Number(object.version) : 0,\n permission: isSet(object.permission)\n ? ParticipantPermission.fromJSON(object.permission)\n : undefined,\n region: isSet(object.region) ? String(object.region) : '',\n isPublisher: isSet(object.isPublisher) ? Boolean(object.isPublisher) : false,\n };\n },\n\n toJSON(message: ParticipantInfo): unknown {\n const obj: any = {};\n message.sid !== undefined && (obj.sid = message.sid);\n message.identity !== undefined && (obj.identity = message.identity);\n message.state !== undefined && (obj.state = participantInfo_StateToJSON(message.state));\n if (message.tracks) {\n obj.tracks = message.tracks.map((e) => (e ? TrackInfo.toJSON(e) : undefined));\n } else {\n obj.tracks = [];\n }\n message.metadata !== undefined && (obj.metadata = message.metadata);\n message.joinedAt !== undefined && (obj.joinedAt = Math.round(message.joinedAt));\n message.name !== undefined && (obj.name = message.name);\n message.version !== undefined && (obj.version = Math.round(message.version));\n message.permission !== undefined &&\n (obj.permission = message.permission\n ? ParticipantPermission.toJSON(message.permission)\n : undefined);\n message.region !== undefined && (obj.region = message.region);\n message.isPublisher !== undefined && (obj.isPublisher = message.isPublisher);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ParticipantInfo>, I>>(object: I): ParticipantInfo {\n const message = createBaseParticipantInfo();\n message.sid = object.sid ?? '';\n message.identity = object.identity ?? '';\n message.state = object.state ?? 0;\n message.tracks = object.tracks?.map((e) => TrackInfo.fromPartial(e)) || [];\n message.metadata = object.metadata ?? '';\n message.joinedAt = object.joinedAt ?? 0;\n message.name = object.name ?? '';\n message.version = object.version ?? 0;\n message.permission =\n object.permission !== undefined && object.permission !== null\n ? ParticipantPermission.fromPartial(object.permission)\n : undefined;\n message.region = object.region ?? '';\n message.isPublisher = object.isPublisher ?? false;\n return message;\n },\n};\n\nfunction createBaseTrackInfo(): TrackInfo {\n return {\n sid: '',\n type: 0,\n name: '',\n muted: false,\n width: 0,\n height: 0,\n simulcast: false,\n disableDtx: false,\n source: 0,\n layers: [],\n mimeType: '',\n mid: '',\n };\n}\n\nexport const TrackInfo = {\n encode(message: TrackInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.sid !== '') {\n writer.uint32(10).string(message.sid);\n }\n if (message.type !== 0) {\n writer.uint32(16).int32(message.type);\n }\n if (message.name !== '') {\n writer.uint32(26).string(message.name);\n }\n if (message.muted === true) {\n writer.uint32(32).bool(message.muted);\n }\n if (message.width !== 0) {\n writer.uint32(40).uint32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(48).uint32(message.height);\n }\n if (message.simulcast === true) {\n writer.uint32(56).bool(message.simulcast);\n }\n if (message.disableDtx === true) {\n writer.uint32(64).bool(message.disableDtx);\n }\n if (message.source !== 0) {\n writer.uint32(72).int32(message.source);\n }\n for (const v of message.layers) {\n VideoLayer.encode(v!, writer.uint32(82).fork()).ldelim();\n }\n if (message.mimeType !== '') {\n writer.uint32(90).string(message.mimeType);\n }\n if (message.mid !== '') {\n writer.uint32(98).string(message.mid);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TrackInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.sid = reader.string();\n break;\n case 2:\n message.type = reader.int32() as any;\n break;\n case 3:\n message.name = reader.string();\n break;\n case 4:\n message.muted = reader.bool();\n break;\n case 5:\n message.width = reader.uint32();\n break;\n case 6:\n message.height = reader.uint32();\n break;\n case 7:\n message.simulcast = reader.bool();\n break;\n case 8:\n message.disableDtx = reader.bool();\n break;\n case 9:\n message.source = reader.int32() as any;\n break;\n case 10:\n message.layers.push(VideoLayer.decode(reader, reader.uint32()));\n break;\n case 11:\n message.mimeType = reader.string();\n break;\n case 12:\n message.mid = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): TrackInfo {\n return {\n sid: isSet(object.sid) ? String(object.sid) : '',\n type: isSet(object.type) ? trackTypeFromJSON(object.type) : 0,\n name: isSet(object.name) ? String(object.name) : '',\n muted: isSet(object.muted) ? Boolean(object.muted) : false,\n width: isSet(object.width) ? Number(object.width) : 0,\n height: isSet(object.height) ? Number(object.height) : 0,\n simulcast: isSet(object.simulcast) ? Boolean(object.simulcast) : false,\n disableDtx: isSet(object.disableDtx) ? Boolean(object.disableDtx) : false,\n source: isSet(object.source) ? trackSourceFromJSON(object.source) : 0,\n layers: Array.isArray(object?.layers)\n ? object.layers.map((e: any) => VideoLayer.fromJSON(e))\n : [],\n mimeType: isSet(object.mimeType) ? String(object.mimeType) : '',\n mid: isSet(object.mid) ? String(object.mid) : '',\n };\n },\n\n toJSON(message: TrackInfo): unknown {\n const obj: any = {};\n message.sid !== undefined && (obj.sid = message.sid);\n message.type !== undefined && (obj.type = trackTypeToJSON(message.type));\n message.name !== undefined && (obj.name = message.name);\n message.muted !== undefined && (obj.muted = message.muted);\n message.width !== undefined && (obj.width = Math.round(message.width));\n message.height !== undefined && (obj.height = Math.round(message.height));\n message.simulcast !== undefined && (obj.simulcast = message.simulcast);\n message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);\n message.source !== undefined && (obj.source = trackSourceToJSON(message.source));\n if (message.layers) {\n obj.layers = message.layers.map((e) => (e ? VideoLayer.toJSON(e) : undefined));\n } else {\n obj.layers = [];\n }\n message.mimeType !== undefined && (obj.mimeType = message.mimeType);\n message.mid !== undefined && (obj.mid = message.mid);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<TrackInfo>, I>>(object: I): TrackInfo {\n const message = createBaseTrackInfo();\n message.sid = object.sid ?? '';\n message.type = object.type ?? 0;\n message.name = object.name ?? '';\n message.muted = object.muted ?? false;\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n message.simulcast = object.simulcast ?? false;\n message.disableDtx = object.disableDtx ?? false;\n message.source = object.source ?? 0;\n message.layers = object.layers?.map((e) => VideoLayer.fromPartial(e)) || [];\n message.mimeType = object.mimeType ?? '';\n message.mid = object.mid ?? '';\n return message;\n },\n};\n\nfunction createBaseVideoLayer(): VideoLayer {\n return { quality: 0, width: 0, height: 0, bitrate: 0, ssrc: 0 };\n}\n\nexport const VideoLayer = {\n encode(message: VideoLayer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.quality !== 0) {\n writer.uint32(8).int32(message.quality);\n }\n if (message.width !== 0) {\n writer.uint32(16).uint32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(24).uint32(message.height);\n }\n if (message.bitrate !== 0) {\n writer.uint32(32).uint32(message.bitrate);\n }\n if (message.ssrc !== 0) {\n writer.uint32(40).uint32(message.ssrc);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): VideoLayer {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVideoLayer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.quality = reader.int32() as any;\n break;\n case 2:\n message.width = reader.uint32();\n break;\n case 3:\n message.height = reader.uint32();\n break;\n case 4:\n message.bitrate = reader.uint32();\n break;\n case 5:\n message.ssrc = reader.uint32();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): VideoLayer {\n return {\n quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,\n width: isSet(object.width) ? Number(object.width) : 0,\n height: isSet(object.height) ? Number(object.height) : 0,\n bitrate: isSet(object.bitrate) ? Number(object.bitrate) : 0,\n ssrc: isSet(object.ssrc) ? Number(object.ssrc) : 0,\n };\n },\n\n toJSON(message: VideoLayer): unknown {\n const obj: any = {};\n message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));\n message.width !== undefined && (obj.width = Math.round(message.width));\n message.height !== undefined && (obj.height = Math.round(message.height));\n message.bitrate !== undefined && (obj.bitrate = Math.round(message.bitrate));\n message.ssrc !== undefined && (obj.ssrc = Math.round(message.ssrc));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<VideoLayer>, I>>(object: I): VideoLayer {\n const message = createBaseVideoLayer();\n message.quality = object.quality ?? 0;\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n message.bitrate = object.bitrate ?? 0;\n message.ssrc = object.ssrc ?? 0;\n return message;\n },\n};\n\nfunction createBaseDataPacket(): DataPacket {\n return { kind: 0, user: undefined, speaker: undefined };\n}\n\nexport const DataPacket = {\n encode(message: DataPacket, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.kind !== 0) {\n writer.uint32(8).int32(message.kind);\n }\n if (message.user !== undefined) {\n UserPacket.encode(message.user, writer.uint32(18).fork()).ldelim();\n }\n if (message.speaker !== undefined) {\n ActiveSpeakerUpdate.encode(message.speaker, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DataPacket {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDataPacket();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.kind = reader.int32() as any;\n break;\n case 2:\n message.user = UserPacket.decode(reader, reader.uint32());\n break;\n case 3:\n message.speaker = ActiveSpeakerUpdate.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): DataPacket {\n return {\n kind: isSet(object.kind) ? dataPacket_KindFromJSON(object.kind) : 0,\n user: isSet(object.user) ? UserPacket.fromJSON(object.user) : undefined,\n speaker: isSet(object.speaker) ? ActiveSpeakerUpdate.fromJSON(object.speaker) : undefined,\n };\n },\n\n toJSON(message: DataPacket): unknown {\n const obj: any = {};\n message.kind !== undefined && (obj.kind = dataPacket_KindToJSON(message.kind));\n message.user !== undefined &&\n (obj.user = message.user ? UserPacket.toJSON(message.user) : undefined);\n message.speaker !== undefined &&\n (obj.speaker = message.speaker ? ActiveSpeakerUpdate.toJSON(message.speaker) : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<DataPacket>, I>>(object: I): DataPacket {\n const message = createBaseDataPacket();\n message.kind = object.kind ?? 0;\n message.user =\n object.user !== undefined && object.user !== null\n ? UserPacket.fromPartial(object.user)\n : undefined;\n message.speaker =\n object.speaker !== undefined && object.speaker !== null\n ? ActiveSpeakerUpdate.fromPartial(object.speaker)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseActiveSpeakerUpdate(): ActiveSpeakerUpdate {\n return { speakers: [] };\n}\n\nexport const ActiveSpeakerUpdate = {\n encode(message: ActiveSpeakerUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.speakers) {\n SpeakerInfo.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ActiveSpeakerUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseActiveSpeakerUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ActiveSpeakerUpdate {\n return {\n speakers: Array.isArray(object?.speakers)\n ? object.speakers.map((e: any) => SpeakerInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ActiveSpeakerUpdate): unknown {\n const obj: any = {};\n if (message.speakers) {\n obj.speakers = message.speakers.map((e) => (e ? SpeakerInfo.toJSON(e) : undefined));\n } else {\n obj.speakers = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ActiveSpeakerUpdate>, I>>(\n object: I,\n ): ActiveSpeakerUpdate {\n const message = createBaseActiveSpeakerUpdate();\n message.speakers = object.speakers?.map((e) => SpeakerInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSpeakerInfo(): SpeakerInfo {\n return { sid: '', level: 0, active: false };\n}\n\nexport const SpeakerInfo = {\n encode(message: SpeakerInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.sid !== '') {\n writer.uint32(10).string(message.sid);\n }\n if (message.level !== 0) {\n writer.uint32(21).float(message.level);\n }\n if (message.active === true) {\n writer.uint32(24).bool(message.active);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SpeakerInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSpeakerInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.sid = reader.string();\n break;\n case 2:\n message.level = reader.float();\n break;\n case 3:\n message.active = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SpeakerInfo {\n return {\n sid: isSet(object.sid) ? String(object.sid) : '',\n level: isSet(object.level) ? Number(object.level) : 0,\n active: isSet(object.active) ? Boolean(object.active) : false,\n };\n },\n\n toJSON(message: SpeakerInfo): unknown {\n const obj: any = {};\n message.sid !== undefined && (obj.sid = message.sid);\n message.level !== undefined && (obj.level = message.level);\n message.active !== undefined && (obj.active = message.active);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SpeakerInfo>, I>>(object: I): SpeakerInfo {\n const message = createBaseSpeakerInfo();\n message.sid = object.sid ?? '';\n message.level = object.level ?? 0;\n message.active = object.active ?? false;\n return message;\n },\n};\n\nfunction createBaseUserPacket(): UserPacket {\n return { participantSid: '', payload: new Uint8Array(), destinationSids: [] };\n}\n\nexport const UserPacket = {\n encode(message: UserPacket, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.participantSid !== '') {\n writer.uint32(10).string(message.participantSid);\n }\n if (message.payload.length !== 0) {\n writer.uint32(18).bytes(message.payload);\n }\n for (const v of message.destinationSids) {\n writer.uint32(26).string(v!);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): UserPacket {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUserPacket();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participantSid = reader.string();\n break;\n case 2:\n message.payload = reader.bytes();\n break;\n case 3:\n message.destinationSids.push(reader.string());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): UserPacket {\n return {\n participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',\n payload: isSet(object.payload) ? bytesFromBase64(object.payload) : new Uint8Array(),\n destinationSids: Array.isArray(object?.destinationSids)\n ? object.destinationSids.map((e: any) => String(e))\n : [],\n };\n },\n\n toJSON(message: UserPacket): unknown {\n const obj: any = {};\n message.participantSid !== undefined && (obj.participantSid = message.participantSid);\n message.payload !== undefined &&\n (obj.payload = base64FromBytes(\n message.payload !== undefined ? message.payload : new Uint8Array(),\n ));\n if (message.destinationSids) {\n obj.destinationSids = message.destinationSids.map((e) => e);\n } else {\n obj.destinationSids = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<UserPacket>, I>>(object: I): UserPacket {\n const message = createBaseUserPacket();\n message.participantSid = object.participantSid ?? '';\n message.payload = object.payload ?? new Uint8Array();\n message.destinationSids = object.destinationSids?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseParticipantTracks(): ParticipantTracks {\n return { participantSid: '', trackSids: [] };\n}\n\nexport const ParticipantTracks = {\n encode(message: ParticipantTracks, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.participantSid !== '') {\n writer.uint32(10).string(message.participantSid);\n }\n for (const v of message.trackSids) {\n writer.uint32(18).string(v!);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantTracks {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseParticipantTracks();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participantSid = reader.string();\n break;\n case 2:\n message.trackSids.push(reader.string());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ParticipantTracks {\n return {\n participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',\n trackSids: Array.isArray(object?.trackSids)\n ? object.trackSids.map((e: any) => String(e))\n : [],\n };\n },\n\n toJSON(message: ParticipantTracks): unknown {\n const obj: any = {};\n message.participantSid !== undefined && (obj.participantSid = message.participantSid);\n if (message.trackSids) {\n obj.trackSids = message.trackSids.map((e) => e);\n } else {\n obj.trackSids = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ParticipantTracks>, I>>(object: I): ParticipantTracks {\n const message = createBaseParticipantTracks();\n message.participantSid = object.participantSid ?? '';\n message.trackSids = object.trackSids?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseClientInfo(): ClientInfo {\n return {\n sdk: 0,\n version: '',\n protocol: 0,\n os: '',\n osVersion: '',\n deviceModel: '',\n browser: '',\n browserVersion: '',\n address: '',\n };\n}\n\nexport const ClientInfo = {\n encode(message: ClientInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.sdk !== 0) {\n writer.uint32(8).int32(message.sdk);\n }\n if (message.version !== '') {\n writer.uint32(18).string(message.version);\n }\n if (message.protocol !== 0) {\n writer.uint32(24).int32(message.protocol);\n }\n if (message.os !== '') {\n writer.uint32(34).string(message.os);\n }\n if (message.osVersion !== '') {\n writer.uint32(42).string(message.osVersion);\n }\n if (message.deviceModel !== '') {\n writer.uint32(50).string(message.deviceModel);\n }\n if (message.browser !== '') {\n writer.uint32(58).string(message.browser);\n }\n if (message.browserVersion !== '') {\n writer.uint32(66).string(message.browserVersion);\n }\n if (message.address !== '') {\n writer.uint32(74).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ClientInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClientInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.sdk = reader.int32() as any;\n break;\n case 2:\n message.version = reader.string();\n break;\n case 3:\n message.protocol = reader.int32();\n break;\n case 4:\n message.os = reader.string();\n break;\n case 5:\n message.osVersion = reader.string();\n break;\n case 6:\n message.deviceModel = reader.string();\n break;\n case 7:\n message.browser = reader.string();\n break;\n case 8:\n message.browserVersion = reader.string();\n break;\n case 9:\n message.address = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ClientInfo {\n return {\n sdk: isSet(object.sdk) ? clientInfo_SDKFromJSON(object.sdk) : 0,\n version: isSet(object.version) ? String(object.version) : '',\n protocol: isSet(object.protocol) ? Number(object.protocol) : 0,\n os: isSet(object.os) ? String(object.os) : '',\n osVersion: isSet(object.osVersion) ? String(object.osVersion) : '',\n deviceModel: isSet(object.deviceModel) ? String(object.deviceModel) : '',\n browser: isSet(object.browser) ? String(object.browser) : '',\n browserVersion: isSet(object.browserVersion) ? String(object.browserVersion) : '',\n address: isSet(object.address) ? String(object.address) : '',\n };\n },\n\n toJSON(message: ClientInfo): unknown {\n const obj: any = {};\n message.sdk !== undefined && (obj.sdk = clientInfo_SDKToJSON(message.sdk));\n message.version !== undefined && (obj.version = message.version);\n message.protocol !== undefined && (obj.protocol = Math.round(message.protocol));\n message.os !== undefined && (obj.os = message.os);\n message.osVersion !== undefined && (obj.osVersion = message.osVersion);\n message.deviceModel !== undefined && (obj.deviceModel = message.deviceModel);\n message.browser !== undefined && (obj.browser = message.browser);\n message.browserVersion !== undefined && (obj.browserVersion = message.browserVersion);\n message.address !== undefined && (obj.address = message.address);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ClientInfo>, I>>(object: I): ClientInfo {\n const message = createBaseClientInfo();\n message.sdk = object.sdk ?? 0;\n message.version = object.version ?? '';\n message.protocol = object.protocol ?? 0;\n message.os = object.os ?? '';\n message.osVersion = object.osVersion ?? '';\n message.deviceModel = object.deviceModel ?? '';\n message.browser = object.browser ?? '';\n message.browserVersion = object.browserVersion ?? '';\n message.address = object.address ?? '';\n return message;\n },\n};\n\nfunction createBaseClientConfiguration(): ClientConfiguration {\n return { video: undefined, screen: undefined, resumeConnection: 0 };\n}\n\nexport const ClientConfiguration = {\n encode(message: ClientConfiguration, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.video !== undefined) {\n VideoConfiguration.encode(message.video, writer.uint32(10).fork()).ldelim();\n }\n if (message.screen !== undefined) {\n VideoConfiguration.encode(message.screen, writer.uint32(18).fork()).ldelim();\n }\n if (message.resumeConnection !== 0) {\n writer.uint32(24).int32(message.resumeConnection);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ClientConfiguration {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseClientConfiguration();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.video = VideoConfiguration.decode(reader, reader.uint32());\n break;\n case 2:\n message.screen = VideoConfiguration.decode(reader, reader.uint32());\n break;\n case 3:\n message.resumeConnection = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ClientConfiguration {\n return {\n video: isSet(object.video) ? VideoConfiguration.fromJSON(object.video) : undefined,\n screen: isSet(object.screen) ? VideoConfiguration.fromJSON(object.screen) : undefined,\n resumeConnection: isSet(object.resumeConnection)\n ? clientConfigSettingFromJSON(object.resumeConnection)\n : 0,\n };\n },\n\n toJSON(message: ClientConfiguration): unknown {\n const obj: any = {};\n message.video !== undefined &&\n (obj.video = message.video ? VideoConfiguration.toJSON(message.video) : undefined);\n message.screen !== undefined &&\n (obj.screen = message.screen ? VideoConfiguration.toJSON(message.screen) : undefined);\n message.resumeConnection !== undefined &&\n (obj.resumeConnection = clientConfigSettingToJSON(message.resumeConnection));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ClientConfiguration>, I>>(\n object: I,\n ): ClientConfiguration {\n const message = createBaseClientConfiguration();\n message.video =\n object.video !== undefined && object.video !== null\n ? VideoConfiguration.fromPartial(object.video)\n : undefined;\n message.screen =\n object.screen !== undefined && object.screen !== null\n ? VideoConfiguration.fromPartial(object.screen)\n : undefined;\n message.resumeConnection = object.resumeConnection ?? 0;\n return message;\n },\n};\n\nfunction createBaseVideoConfiguration(): VideoConfiguration {\n return { hardwareEncoder: 0 };\n}\n\nexport const VideoConfiguration = {\n encode(message: VideoConfiguration, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.hardwareEncoder !== 0) {\n writer.uint32(8).int32(message.hardwareEncoder);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): VideoConfiguration {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseVideoConfiguration();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.hardwareEncoder = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): VideoConfiguration {\n return {\n hardwareEncoder: isSet(object.hardwareEncoder)\n ? clientConfigSettingFromJSON(object.hardwareEncoder)\n : 0,\n };\n },\n\n toJSON(message: VideoConfiguration): unknown {\n const obj: any = {};\n message.hardwareEncoder !== undefined &&\n (obj.hardwareEncoder = clientConfigSettingToJSON(message.hardwareEncoder));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<VideoConfiguration>, I>>(object: I): VideoConfiguration {\n const message = createBaseVideoConfiguration();\n message.hardwareEncoder = object.hardwareEncoder ?? 0;\n return message;\n },\n};\n\nfunction createBaseRTPStats(): RTPStats {\n return {\n startTime: undefined,\n endTime: undefined,\n duration: 0,\n packets: 0,\n packetRate: 0,\n bytes: 0,\n bitrate: 0,\n packetsLost: 0,\n packetLossRate: 0,\n packetLossPercentage: 0,\n packetsDuplicate: 0,\n packetDuplicateRate: 0,\n bytesDuplicate: 0,\n bitrateDuplicate: 0,\n packetsPadding: 0,\n packetPaddingRate: 0,\n bytesPadding: 0,\n bitratePadding: 0,\n packetsOutOfOrder: 0,\n frames: 0,\n frameRate: 0,\n jitterCurrent: 0,\n jitterMax: 0,\n gapHistogram: {},\n nacks: 0,\n nackMisses: 0,\n plis: 0,\n lastPli: undefined,\n firs: 0,\n lastFir: undefined,\n rttCurrent: 0,\n rttMax: 0,\n keyFrames: 0,\n lastKeyFrame: undefined,\n layerLockPlis: 0,\n lastLayerLockPli: undefined,\n };\n}\n\nexport const RTPStats = {\n encode(message: RTPStats, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.startTime !== undefined) {\n Timestamp.encode(toTimestamp(message.startTime), writer.uint32(10).fork()).ldelim();\n }\n if (message.endTime !== undefined) {\n Timestamp.encode(toTimestamp(message.endTime), writer.uint32(18).fork()).ldelim();\n }\n if (message.duration !== 0) {\n writer.uint32(25).double(message.duration);\n }\n if (message.packets !== 0) {\n writer.uint32(32).uint32(message.packets);\n }\n if (message.packetRate !== 0) {\n writer.uint32(41).double(message.packetRate);\n }\n if (message.bytes !== 0) {\n writer.uint32(48).uint64(message.bytes);\n }\n if (message.bitrate !== 0) {\n writer.uint32(57).double(message.bitrate);\n }\n if (message.packetsLost !== 0) {\n writer.uint32(64).uint32(message.packetsLost);\n }\n if (message.packetLossRate !== 0) {\n writer.uint32(73).double(message.packetLossRate);\n }\n if (message.packetLossPercentage !== 0) {\n writer.uint32(85).float(message.packetLossPercentage);\n }\n if (message.packetsDuplicate !== 0) {\n writer.uint32(88).uint32(message.packetsDuplicate);\n }\n if (message.packetDuplicateRate !== 0) {\n writer.uint32(97).double(message.packetDuplicateRate);\n }\n if (message.bytesDuplicate !== 0) {\n writer.uint32(104).uint64(message.bytesDuplicate);\n }\n if (message.bitrateDuplicate !== 0) {\n writer.uint32(113).double(message.bitrateDuplicate);\n }\n if (message.packetsPadding !== 0) {\n writer.uint32(120).uint32(message.packetsPadding);\n }\n if (message.packetPaddingRate !== 0) {\n writer.uint32(129).double(message.packetPaddingRate);\n }\n if (message.bytesPadding !== 0) {\n writer.uint32(136).uint64(message.bytesPadding);\n }\n if (message.bitratePadding !== 0) {\n writer.uint32(145).double(message.bitratePadding);\n }\n if (message.packetsOutOfOrder !== 0) {\n writer.uint32(152).uint32(message.packetsOutOfOrder);\n }\n if (message.frames !== 0) {\n writer.uint32(160).uint32(message.frames);\n }\n if (message.frameRate !== 0) {\n writer.uint32(169).double(message.frameRate);\n }\n if (message.jitterCurrent !== 0) {\n writer.uint32(177).double(message.jitterCurrent);\n }\n if (message.jitterMax !== 0) {\n writer.uint32(185).double(message.jitterMax);\n }\n Object.entries(message.gapHistogram).forEach(([key, value]) => {\n RTPStats_GapHistogramEntry.encode(\n { key: key as any, value },\n writer.uint32(194).fork(),\n ).ldelim();\n });\n if (message.nacks !== 0) {\n writer.uint32(200).uint32(message.nacks);\n }\n if (message.nackMisses !== 0) {\n writer.uint32(208).uint32(message.nackMisses);\n }\n if (message.plis !== 0) {\n writer.uint32(216).uint32(message.plis);\n }\n if (message.lastPli !== undefined) {\n Timestamp.encode(toTimestamp(message.lastPli), writer.uint32(226).fork()).ldelim();\n }\n if (message.firs !== 0) {\n writer.uint32(232).uint32(message.firs);\n }\n if (message.lastFir !== undefined) {\n Timestamp.encode(toTimestamp(message.lastFir), writer.uint32(242).fork()).ldelim();\n }\n if (message.rttCurrent !== 0) {\n writer.uint32(248).uint32(message.rttCurrent);\n }\n if (message.rttMax !== 0) {\n writer.uint32(256).uint32(message.rttMax);\n }\n if (message.keyFrames !== 0) {\n writer.uint32(264).uint32(message.keyFrames);\n }\n if (message.lastKeyFrame !== undefined) {\n Timestamp.encode(toTimestamp(message.lastKeyFrame), writer.uint32(274).fork()).ldelim();\n }\n if (message.layerLockPlis !== 0) {\n writer.uint32(280).uint32(message.layerLockPlis);\n }\n if (message.lastLayerLockPli !== undefined) {\n Timestamp.encode(toTimestamp(message.lastLayerLockPli), writer.uint32(290).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): RTPStats {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRTPStats();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.startTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n break;\n case 2:\n message.endTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n break;\n case 3:\n message.duration = reader.double();\n break;\n case 4:\n message.packets = reader.uint32();\n break;\n case 5:\n message.packetRate = reader.double();\n break;\n case 6:\n message.bytes = longToNumber(reader.uint64() as Long);\n break;\n case 7:\n message.bitrate = reader.double();\n break;\n case 8:\n message.packetsLost = reader.uint32();\n break;\n case 9:\n message.packetLossRate = reader.double();\n break;\n case 10:\n message.packetLossPercentage = reader.float();\n break;\n case 11:\n message.packetsDuplicate = reader.uint32();\n break;\n case 12:\n message.packetDuplicateRate = reader.double();\n break;\n case 13:\n message.bytesDuplicate = longToNumber(reader.uint64() as Long);\n break;\n case 14:\n message.bitrateDuplicate = reader.double();\n break;\n case 15:\n message.packetsPadding = reader.uint32();\n break;\n case 16:\n message.packetPaddingRate = reader.double();\n break;\n case 17:\n message.bytesPadding = longToNumber(reader.uint64() as Long);\n break;\n case 18:\n message.bitratePadding = reader.double();\n break;\n case 19:\n message.packetsOutOfOrder = reader.uint32();\n break;\n case 20:\n message.frames = reader.uint32();\n break;\n case 21:\n message.frameRate = reader.double();\n break;\n case 22:\n message.jitterCurrent = reader.double();\n break;\n case 23:\n message.jitterMax = reader.double();\n break;\n case 24:\n const entry24 = RTPStats_GapHistogramEntry.decode(reader, reader.uint32());\n if (entry24.value !== undefined) {\n message.gapHistogram[entry24.key] = entry24.value;\n }\n break;\n case 25:\n message.nacks = reader.uint32();\n break;\n case 26:\n message.nackMisses = reader.uint32();\n break;\n case 27:\n message.plis = reader.uint32();\n break;\n case 28:\n message.lastPli = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n break;\n case 29:\n message.firs = reader.uint32();\n break;\n case 30:\n message.lastFir = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n break;\n case 31:\n message.rttCurrent = reader.uint32();\n break;\n case 32:\n message.rttMax = reader.uint32();\n break;\n case 33:\n message.keyFrames = reader.uint32();\n break;\n case 34:\n message.lastKeyFrame = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n break;\n case 35:\n message.layerLockPlis = reader.uint32();\n break;\n case 36:\n message.lastLayerLockPli = fromTimestamp(Timestamp.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): RTPStats {\n return {\n startTime: isSet(object.startTime) ? fromJsonTimestamp(object.startTime) : undefined,\n endTime: isSet(object.endTime) ? fromJsonTimestamp(object.endTime) : undefined,\n duration: isSet(object.duration) ? Number(object.duration) : 0,\n packets: isSet(object.packets) ? Number(object.packets) : 0,\n packetRate: isSet(object.packetRate) ? Number(object.packetRate) : 0,\n bytes: isSet(object.bytes) ? Number(object.bytes) : 0,\n bitrate: isSet(object.bitrate) ? Number(object.bitrate) : 0,\n packetsLost: isSet(object.packetsLost) ? Number(object.packetsLost) : 0,\n packetLossRate: isSet(object.packetLossRate) ? Number(object.packetLossRate) : 0,\n packetLossPercentage: isSet(object.packetLossPercentage)\n ? Number(object.packetLossPercentage)\n : 0,\n packetsDuplicate: isSet(object.packetsDuplicate) ? Number(object.packetsDuplicate) : 0,\n packetDuplicateRate: isSet(object.packetDuplicateRate)\n ? Number(object.packetDuplicateRate)\n : 0,\n bytesDuplicate: isSet(object.bytesDuplicate) ? Number(object.bytesDuplicate) : 0,\n bitrateDuplicate: isSet(object.bitrateDuplicate) ? Number(object.bitrateDuplicate) : 0,\n packetsPadding: isSet(object.packetsPadding) ? Number(object.packetsPadding) : 0,\n packetPaddingRate: isSet(object.packetPaddingRate) ? Number(object.packetPaddingRate) : 0,\n bytesPadding: isSet(object.bytesPadding) ? Number(object.bytesPadding) : 0,\n bitratePadding: isSet(object.bitratePadding) ? Number(object.bitratePadding) : 0,\n packetsOutOfOrder: isSet(object.packetsOutOfOrder) ? Number(object.packetsOutOfOrder) : 0,\n frames: isSet(object.frames) ? Number(object.frames) : 0,\n frameRate: isSet(object.frameRate) ? Number(object.frameRate) : 0,\n jitterCurrent: isSet(object.jitterCurrent) ? Number(object.jitterCurrent) : 0,\n jitterMax: isSet(object.jitterMax) ? Number(object.jitterMax) : 0,\n gapHistogram: isObject(object.gapHistogram)\n ? Object.entries(object.gapHistogram).reduce<{ [key: number]: number }>(\n (acc, [key, value]) => {\n acc[Number(key)] = Number(value);\n return acc;\n },\n {},\n )\n : {},\n nacks: isSet(object.nacks) ? Number(object.nacks) : 0,\n nackMisses: isSet(object.nackMisses) ? Number(object.nackMisses) : 0,\n plis: isSet(object.plis) ? Number(object.plis) : 0,\n lastPli: isSet(object.lastPli) ? fromJsonTimestamp(object.lastPli) : undefined,\n firs: isSet(object.firs) ? Number(object.firs) : 0,\n lastFir: isSet(object.lastFir) ? fromJsonTimestamp(object.lastFir) : undefined,\n rttCurrent: isSet(object.rttCurrent) ? Number(object.rttCurrent) : 0,\n rttMax: isSet(object.rttMax) ? Number(object.rttMax) : 0,\n keyFrames: isSet(object.keyFrames) ? Number(object.keyFrames) : 0,\n lastKeyFrame: isSet(object.lastKeyFrame) ? fromJsonTimestamp(object.lastKeyFrame) : undefined,\n layerLockPlis: isSet(object.layerLockPlis) ? Number(object.layerLockPlis) : 0,\n lastLayerLockPli: isSet(object.lastLayerLockPli)\n ? fromJsonTimestamp(object.lastLayerLockPli)\n : undefined,\n };\n },\n\n toJSON(message: RTPStats): unknown {\n const obj: any = {};\n message.startTime !== undefined && (obj.startTime = message.startTime.toISOString());\n message.endTime !== undefined && (obj.endTime = message.endTime.toISOString());\n message.duration !== undefined && (obj.duration = message.duration);\n message.packets !== undefined && (obj.packets = Math.round(message.packets));\n message.packetRate !== undefined && (obj.packetRate = message.packetRate);\n message.bytes !== undefined && (obj.bytes = Math.round(message.bytes));\n message.bitrate !== undefined && (obj.bitrate = message.bitrate);\n message.packetsLost !== undefined && (obj.packetsLost = Math.round(message.packetsLost));\n message.packetLossRate !== undefined && (obj.packetLossRate = message.packetLossRate);\n message.packetLossPercentage !== undefined &&\n (obj.packetLossPercentage = message.packetLossPercentage);\n message.packetsDuplicate !== undefined &&\n (obj.packetsDuplicate = Math.round(message.packetsDuplicate));\n message.packetDuplicateRate !== undefined &&\n (obj.packetDuplicateRate = message.packetDuplicateRate);\n message.bytesDuplicate !== undefined &&\n (obj.bytesDuplicate = Math.round(message.bytesDuplicate));\n message.bitrateDuplicate !== undefined && (obj.bitrateDuplicate = message.bitrateDuplicate);\n message.packetsPadding !== undefined &&\n (obj.packetsPadding = Math.round(message.packetsPadding));\n message.packetPaddingRate !== undefined && (obj.packetPaddingRate = message.packetPaddingRate);\n message.bytesPadding !== undefined && (obj.bytesPadding = Math.round(message.bytesPadding));\n message.bitratePadding !== undefined && (obj.bitratePadding = message.bitratePadding);\n message.packetsOutOfOrder !== undefined &&\n (obj.packetsOutOfOrder = Math.round(message.packetsOutOfOrder));\n message.frames !== undefined && (obj.frames = Math.round(message.frames));\n message.frameRate !== undefined && (obj.frameRate = message.frameRate);\n message.jitterCurrent !== undefined && (obj.jitterCurrent = message.jitterCurrent);\n message.jitterMax !== undefined && (obj.jitterMax = message.jitterMax);\n obj.gapHistogram = {};\n if (message.gapHistogram) {\n Object.entries(message.gapHistogram).forEach(([k, v]) => {\n obj.gapHistogram[k] = Math.round(v);\n });\n }\n message.nacks !== undefined && (obj.nacks = Math.round(message.nacks));\n message.nackMisses !== undefined && (obj.nackMisses = Math.round(message.nackMisses));\n message.plis !== undefined && (obj.plis = Math.round(message.plis));\n message.lastPli !== undefined && (obj.lastPli = message.lastPli.toISOString());\n message.firs !== undefined && (obj.firs = Math.round(message.firs));\n message.lastFir !== undefined && (obj.lastFir = message.lastFir.toISOString());\n message.rttCurrent !== undefined && (obj.rttCurrent = Math.round(message.rttCurrent));\n message.rttMax !== undefined && (obj.rttMax = Math.round(message.rttMax));\n message.keyFrames !== undefined && (obj.keyFrames = Math.round(message.keyFrames));\n message.lastKeyFrame !== undefined && (obj.lastKeyFrame = message.lastKeyFrame.toISOString());\n message.layerLockPlis !== undefined && (obj.layerLockPlis = Math.round(message.layerLockPlis));\n message.lastLayerLockPli !== undefined &&\n (obj.lastLayerLockPli = message.lastLayerLockPli.toISOString());\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<RTPStats>, I>>(object: I): RTPStats {\n const message = createBaseRTPStats();\n message.startTime = object.startTime ?? undefined;\n message.endTime = object.endTime ?? undefined;\n message.duration = object.duration ?? 0;\n message.packets = object.packets ?? 0;\n message.packetRate = object.packetRate ?? 0;\n message.bytes = object.bytes ?? 0;\n message.bitrate = object.bitrate ?? 0;\n message.packetsLost = object.packetsLost ?? 0;\n message.packetLossRate = object.packetLossRate ?? 0;\n message.packetLossPercentage = object.packetLossPercentage ?? 0;\n message.packetsDuplicate = object.packetsDuplicate ?? 0;\n message.packetDuplicateRate = object.packetDuplicateRate ?? 0;\n message.bytesDuplicate = object.bytesDuplicate ?? 0;\n message.bitrateDuplicate = object.bitrateDuplicate ?? 0;\n message.packetsPadding = object.packetsPadding ?? 0;\n message.packetPaddingRate = object.packetPaddingRate ?? 0;\n message.bytesPadding = object.bytesPadding ?? 0;\n message.bitratePadding = object.bitratePadding ?? 0;\n message.packetsOutOfOrder = object.packetsOutOfOrder ?? 0;\n message.frames = object.frames ?? 0;\n message.frameRate = object.frameRate ?? 0;\n message.jitterCurrent = object.jitterCurrent ?? 0;\n message.jitterMax = object.jitterMax ?? 0;\n message.gapHistogram = Object.entries(object.gapHistogram ?? {}).reduce<{\n [key: number]: number;\n }>((acc, [key, value]) => {\n if (value !== undefined) {\n acc[Number(key)] = Number(value);\n }\n return acc;\n }, {});\n message.nacks = object.nacks ?? 0;\n message.nackMisses = object.nackMisses ?? 0;\n message.plis = object.plis ?? 0;\n message.lastPli = object.lastPli ?? undefined;\n message.firs = object.firs ?? 0;\n message.lastFir = object.lastFir ?? undefined;\n message.rttCurrent = object.rttCurrent ?? 0;\n message.rttMax = object.rttMax ?? 0;\n message.keyFrames = object.keyFrames ?? 0;\n message.lastKeyFrame = object.lastKeyFrame ?? undefined;\n message.layerLockPlis = object.layerLockPlis ?? 0;\n message.lastLayerLockPli = object.lastLayerLockPli ?? undefined;\n return message;\n },\n};\n\nfunction createBaseRTPStats_GapHistogramEntry(): RTPStats_GapHistogramEntry {\n return { key: 0, value: 0 };\n}\n\nexport const RTPStats_GapHistogramEntry = {\n encode(\n message: RTPStats_GapHistogramEntry,\n writer: _m0.Writer = _m0.Writer.create(),\n ): _m0.Writer {\n if (message.key !== 0) {\n writer.uint32(8).int32(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).uint32(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): RTPStats_GapHistogramEntry {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRTPStats_GapHistogramEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.int32();\n break;\n case 2:\n message.value = reader.uint32();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): RTPStats_GapHistogramEntry {\n return {\n key: isSet(object.key) ? Number(object.key) : 0,\n value: isSet(object.value) ? Number(object.value) : 0,\n };\n },\n\n toJSON(message: RTPStats_GapHistogramEntry): unknown {\n const obj: any = {};\n message.key !== undefined && (obj.key = Math.round(message.key));\n message.value !== undefined && (obj.value = Math.round(message.value));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<RTPStats_GapHistogramEntry>, I>>(\n object: I,\n ): RTPStats_GapHistogramEntry {\n const message = createBaseRTPStats_GapHistogramEntry();\n message.key = object.key ?? 0;\n message.value = object.value ?? 0;\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n if (typeof global !== 'undefined') return global;\n throw 'Unable to locate global object';\n})();\n\nconst atob: (b64: string) => string =\n globalThis.atob || ((b64) => globalThis.Buffer.from(b64, 'base64').toString('binary'));\nfunction bytesFromBase64(b64: string): Uint8Array {\n const bin = atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n}\n\nconst btoa: (bin: string) => string =\n globalThis.btoa || ((bin) => globalThis.Buffer.from(bin, 'binary').toString('base64'));\nfunction base64FromBytes(arr: Uint8Array): string {\n const bin: string[] = [];\n arr.forEach((byte) => {\n bin.push(String.fromCharCode(byte));\n });\n return btoa(bin.join(''));\n}\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nfunction toTimestamp(date: Date): Timestamp {\n const seconds = date.getTime() / 1_000;\n const nanos = (date.getTime() % 1_000) * 1_000_000;\n return { seconds, nanos };\n}\n\nfunction fromTimestamp(t: Timestamp): Date {\n let millis = t.seconds * 1_000;\n millis += t.nanos / 1_000_000;\n return new Date(millis);\n}\n\nfunction fromJsonTimestamp(o: any): Date {\n if (o instanceof Date) {\n return o;\n } else if (typeof o === 'string') {\n return new Date(o);\n } else {\n return fromTimestamp(Timestamp.fromJSON(o));\n }\n}\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER');\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n\nfunction isObject(value: any): boolean {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n","/* eslint-disable */\nimport Long from 'long';\nimport * as _m0 from 'protobufjs/minimal';\n\nexport const protobufPackage = 'google.protobuf';\n\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(time(NULL));\n * timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n * struct timeval tv;\n * gettimeofday(&tv, NULL);\n *\n * Timestamp timestamp;\n * timestamp.set_seconds(tv.tv_sec);\n * timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n * FILETIME ft;\n * GetSystemTimeAsFileTime(&ft);\n * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n * Timestamp timestamp;\n * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n * long millis = System.currentTimeMillis();\n *\n * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n * .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n * Instant now = Instant.now();\n *\n * Timestamp timestamp =\n * Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n * .setNanos(now.getNano()).build();\n *\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n * timestamp = Timestamp()\n * timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D\n * ) to obtain a formatter capable of generating timestamps in this format.\n */\nexport interface Timestamp {\n /**\n * Represents seconds of UTC time since Unix epoch\n * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n * 9999-12-31T23:59:59Z inclusive.\n */\n seconds: number;\n /**\n * Non-negative fractions of a second at nanosecond resolution. Negative\n * second values with fractions must still have non-negative nanos values\n * that count forward in time. Must be from 0 to 999,999,999\n * inclusive.\n */\n nanos: number;\n}\n\nfunction createBaseTimestamp(): Timestamp {\n return { seconds: 0, nanos: 0 };\n}\n\nexport const Timestamp = {\n encode(message: Timestamp, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.seconds !== 0) {\n writer.uint32(8).int64(message.seconds);\n }\n if (message.nanos !== 0) {\n writer.uint32(16).int32(message.nanos);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Timestamp {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTimestamp();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.seconds = longToNumber(reader.int64() as Long);\n break;\n case 2:\n message.nanos = reader.int32();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): Timestamp {\n return {\n seconds: isSet(object.seconds) ? Number(object.seconds) : 0,\n nanos: isSet(object.nanos) ? Number(object.nanos) : 0,\n };\n },\n\n toJSON(message: Timestamp): unknown {\n const obj: any = {};\n message.seconds !== undefined && (obj.seconds = Math.round(message.seconds));\n message.nanos !== undefined && (obj.nanos = Math.round(message.nanos));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<Timestamp>, I>>(object: I): Timestamp {\n const message = createBaseTimestamp();\n message.seconds = object.seconds ?? 0;\n message.nanos = object.nanos ?? 0;\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== 'undefined') return globalThis;\n if (typeof self !== 'undefined') return self;\n if (typeof window !== 'undefined') return window;\n if (typeof global !== 'undefined') return global;\n throw 'Unable to locate global object';\n})();\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER');\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n","/* eslint-disable */\nimport Long from 'long';\nimport * as _m0 from 'protobufjs/minimal';\nimport {\n TrackType,\n TrackSource,\n Room,\n ParticipantInfo,\n ClientConfiguration,\n TrackInfo,\n VideoQuality,\n ConnectionQuality,\n VideoLayer,\n ParticipantTracks,\n SpeakerInfo,\n trackTypeFromJSON,\n trackSourceFromJSON,\n trackTypeToJSON,\n trackSourceToJSON,\n videoQualityFromJSON,\n videoQualityToJSON,\n connectionQualityFromJSON,\n connectionQualityToJSON,\n} from './livekit_models';\n\nexport const protobufPackage = 'livekit';\n\nexport enum SignalTarget {\n PUBLISHER = 0,\n SUBSCRIBER = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function signalTargetFromJSON(object: any): SignalTarget {\n switch (object) {\n case 0:\n case 'PUBLISHER':\n return SignalTarget.PUBLISHER;\n case 1:\n case 'SUBSCRIBER':\n return SignalTarget.SUBSCRIBER;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return SignalTarget.UNRECOGNIZED;\n }\n}\n\nexport function signalTargetToJSON(object: SignalTarget): string {\n switch (object) {\n case SignalTarget.PUBLISHER:\n return 'PUBLISHER';\n case SignalTarget.SUBSCRIBER:\n return 'SUBSCRIBER';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport enum StreamState {\n ACTIVE = 0,\n PAUSED = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function streamStateFromJSON(object: any): StreamState {\n switch (object) {\n case 0:\n case 'ACTIVE':\n return StreamState.ACTIVE;\n case 1:\n case 'PAUSED':\n return StreamState.PAUSED;\n case -1:\n case 'UNRECOGNIZED':\n default:\n return StreamState.UNRECOGNIZED;\n }\n}\n\nexport function streamStateToJSON(object: StreamState): string {\n switch (object) {\n case StreamState.ACTIVE:\n return 'ACTIVE';\n case StreamState.PAUSED:\n return 'PAUSED';\n default:\n return 'UNKNOWN';\n }\n}\n\nexport interface SignalRequest {\n /** initial join exchange, for publisher */\n offer?: SessionDescription | undefined;\n /** participant answering publisher offer */\n answer?: SessionDescription | undefined;\n trickle?: TrickleRequest | undefined;\n addTrack?: AddTrackRequest | undefined;\n /** mute the participant's published tracks */\n mute?: MuteTrackRequest | undefined;\n /** Subscribe or unsubscribe from tracks */\n subscription?: UpdateSubscription | undefined;\n /** Update settings of subscribed tracks */\n trackSetting?: UpdateTrackSettings | undefined;\n /** Immediately terminate session */\n leave?: LeaveRequest | undefined;\n /**\n * Set active published layers, deprecated in favor of automatic tracking\n * SetSimulcastLayers simulcast = 9;\n * Update published video layers\n */\n updateLayers?: UpdateVideoLayers | undefined;\n /** Update subscriber permissions */\n subscriptionPermission?: SubscriptionPermission | undefined;\n /** sync client's subscribe state to server during reconnect */\n syncState?: SyncState | undefined;\n /** Simulate conditions, for client validations */\n simulate?: SimulateScenario | undefined;\n}\n\nexport interface SignalResponse {\n /** sent when join is accepted */\n join?: JoinResponse | undefined;\n /** sent when server answers publisher */\n answer?: SessionDescription | undefined;\n /** sent when server is sending subscriber an offer */\n offer?: SessionDescription | undefined;\n /** sent when an ICE candidate is available */\n trickle?: TrickleRequest | undefined;\n /** sent when participants in the room has changed */\n update?: ParticipantUpdate | undefined;\n /** sent to the participant when their track has been published */\n trackPublished?: TrackPublishedResponse | undefined;\n /** Immediately terminate session */\n leave?: LeaveRequest | undefined;\n /** server initiated mute */\n mute?: MuteTrackRequest | undefined;\n /** indicates changes to speaker status, including when they've gone to not speaking */\n speakersChanged?: SpeakersChanged | undefined;\n /** sent when metadata of the room has changed */\n roomUpdate?: RoomUpdate | undefined;\n /** when connection quality changed */\n connectionQuality?: ConnectionQualityUpdate | undefined;\n /**\n * when streamed tracks state changed, used to notify when any of the streams were paused due to\n * congestion\n */\n streamStateUpdate?: StreamStateUpdate | undefined;\n /** when max subscribe quality changed, used by dynamic broadcasting to disable unused layers */\n subscribedQualityUpdate?: SubscribedQualityUpdate | undefined;\n /** when subscription permission changed */\n subscriptionPermissionUpdate?: SubscriptionPermissionUpdate | undefined;\n /** update the token the client was using, to prevent an active client from using an expired token */\n refreshToken: string | undefined;\n /** server initiated track unpublish */\n trackUnpublished?: TrackUnpublishedResponse | undefined;\n}\n\nexport interface AddTrackRequest {\n /** client ID of track, to match it when RTC track is received */\n cid: string;\n name: string;\n type: TrackType;\n /** to be deprecated in favor of layers */\n width: number;\n height: number;\n /** true to add track and initialize to muted */\n muted: boolean;\n /** true if DTX (Discontinuous Transmission) is disabled for audio */\n disableDtx: boolean;\n source: TrackSource;\n layers: VideoLayer[];\n}\n\nexport interface TrickleRequest {\n candidateInit: string;\n target: SignalTarget;\n}\n\nexport interface MuteTrackRequest {\n sid: string;\n muted: boolean;\n}\n\nexport interface JoinResponse {\n room?: Room;\n participant?: ParticipantInfo;\n otherParticipants: ParticipantInfo[];\n serverVersion: string;\n iceServers: ICEServer[];\n /** use subscriber as the primary PeerConnection */\n subscriberPrimary: boolean;\n /**\n * when the current server isn't available, return alternate url to retry connection\n * when this is set, the other fields will be largely empty\n */\n alternativeUrl: string;\n clientConfiguration?: ClientConfiguration;\n serverRegion: string;\n}\n\nexport interface TrackPublishedResponse {\n cid: string;\n track?: TrackInfo;\n}\n\nexport interface TrackUnpublishedResponse {\n trackSid: string;\n}\n\nexport interface SessionDescription {\n /** \"answer\" | \"offer\" | \"pranswer\" | \"rollback\" */\n type: string;\n sdp: string;\n}\n\nexport interface ParticipantUpdate {\n participants: ParticipantInfo[];\n}\n\nexport interface UpdateSubscription {\n trackSids: string[];\n subscribe: boolean;\n participantTracks: ParticipantTracks[];\n}\n\nexport interface UpdateTrackSettings {\n trackSids: string[];\n /** when true, the track is placed in a paused state, with no new data returned */\n disabled: boolean;\n /** deprecated in favor of width & height */\n quality: VideoQuality;\n /** for video, width to receive */\n width: number;\n /** for video, height to receive */\n height: number;\n}\n\nexport interface LeaveRequest {\n /**\n * sent when server initiates the disconnect due to server-restart\n * indicates clients should attempt full-reconnect sequence\n */\n canReconnect: boolean;\n}\n\n/** message to indicate published video track dimensions are changing */\nexport interface UpdateVideoLayers {\n trackSid: string;\n layers: VideoLayer[];\n}\n\nexport interface ICEServer {\n urls: string[];\n username: string;\n credential: string;\n}\n\nexport interface SpeakersChanged {\n speakers: SpeakerInfo[];\n}\n\nexport interface RoomUpdate {\n room?: Room;\n}\n\nexport interface ConnectionQualityInfo {\n participantSid: string;\n quality: ConnectionQuality;\n score: number;\n}\n\nexport interface ConnectionQualityUpdate {\n updates: ConnectionQualityInfo[];\n}\n\nexport interface StreamStateInfo {\n participantSid: string;\n trackSid: string;\n state: StreamState;\n}\n\nexport interface StreamStateUpdate {\n streamStates: StreamStateInfo[];\n}\n\nexport interface SubscribedQuality {\n quality: VideoQuality;\n enabled: boolean;\n}\n\nexport interface SubscribedQualityUpdate {\n trackSid: string;\n subscribedQualities: SubscribedQuality[];\n}\n\nexport interface TrackPermission {\n /** permission could be granted either by participant sid or identity */\n participantSid: string;\n allTracks: boolean;\n trackSids: string[];\n participantIdentity: string;\n}\n\nexport interface SubscriptionPermission {\n allParticipants: boolean;\n trackPermissions: TrackPermission[];\n}\n\nexport interface SubscriptionPermissionUpdate {\n participantSid: string;\n trackSid: string;\n allowed: boolean;\n}\n\nexport interface SyncState {\n answer?: SessionDescription;\n subscription?: UpdateSubscription;\n publishTracks: TrackPublishedResponse[];\n dataChannels: DataChannelInfo[];\n}\n\nexport interface DataChannelInfo {\n label: string;\n id: number;\n target: SignalTarget;\n}\n\nexport interface SimulateScenario {\n /** simulate N seconds of speaker activity */\n speakerUpdate: number | undefined;\n /** simulate local node failure */\n nodeFailure: boolean | undefined;\n /** simulate migration */\n migration: boolean | undefined;\n /** server to send leave */\n serverLeave: boolean | undefined;\n}\n\nfunction createBaseSignalRequest(): SignalRequest {\n return {\n offer: undefined,\n answer: undefined,\n trickle: undefined,\n addTrack: undefined,\n mute: undefined,\n subscription: undefined,\n trackSetting: undefined,\n leave: undefined,\n updateLayers: undefined,\n subscriptionPermission: undefined,\n syncState: undefined,\n simulate: undefined,\n };\n}\n\nexport const SignalRequest = {\n encode(message: SignalRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.offer !== undefined) {\n SessionDescription.encode(message.offer, writer.uint32(10).fork()).ldelim();\n }\n if (message.answer !== undefined) {\n SessionDescription.encode(message.answer, writer.uint32(18).fork()).ldelim();\n }\n if (message.trickle !== undefined) {\n TrickleRequest.encode(message.trickle, writer.uint32(26).fork()).ldelim();\n }\n if (message.addTrack !== undefined) {\n AddTrackRequest.encode(message.addTrack, writer.uint32(34).fork()).ldelim();\n }\n if (message.mute !== undefined) {\n MuteTrackRequest.encode(message.mute, writer.uint32(42).fork()).ldelim();\n }\n if (message.subscription !== undefined) {\n UpdateSubscription.encode(message.subscription, writer.uint32(50).fork()).ldelim();\n }\n if (message.trackSetting !== undefined) {\n UpdateTrackSettings.encode(message.trackSetting, writer.uint32(58).fork()).ldelim();\n }\n if (message.leave !== undefined) {\n LeaveRequest.encode(message.leave, writer.uint32(66).fork()).ldelim();\n }\n if (message.updateLayers !== undefined) {\n UpdateVideoLayers.encode(message.updateLayers, writer.uint32(82).fork()).ldelim();\n }\n if (message.subscriptionPermission !== undefined) {\n SubscriptionPermission.encode(\n message.subscriptionPermission,\n writer.uint32(90).fork(),\n ).ldelim();\n }\n if (message.syncState !== undefined) {\n SyncState.encode(message.syncState, writer.uint32(98).fork()).ldelim();\n }\n if (message.simulate !== undefined) {\n SimulateScenario.encode(message.simulate, writer.uint32(106).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SignalRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSignalRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.offer = SessionDescription.decode(reader, reader.uint32());\n break;\n case 2:\n message.answer = SessionDescription.decode(reader, reader.uint32());\n break;\n case 3:\n message.trickle = TrickleRequest.decode(reader, reader.uint32());\n break;\n case 4:\n message.addTrack = AddTrackRequest.decode(reader, reader.uint32());\n break;\n case 5:\n message.mute = MuteTrackRequest.decode(reader, reader.uint32());\n break;\n case 6:\n message.subscription = UpdateSubscription.decode(reader, reader.uint32());\n break;\n case 7:\n message.trackSetting = UpdateTrackSettings.decode(reader, reader.uint32());\n break;\n case 8:\n message.leave = LeaveRequest.decode(reader, reader.uint32());\n break;\n case 10:\n message.updateLayers = UpdateVideoLayers.decode(reader, reader.uint32());\n break;\n case 11:\n message.subscriptionPermission = SubscriptionPermission.decode(reader, reader.uint32());\n break;\n case 12:\n message.syncState = SyncState.decode(reader, reader.uint32());\n break;\n case 13:\n message.simulate = SimulateScenario.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SignalRequest {\n return {\n offer: isSet(object.offer) ? SessionDescription.fromJSON(object.offer) : undefined,\n answer: isSet(object.answer) ? SessionDescription.fromJSON(object.answer) : undefined,\n trickle: isSet(object.trickle) ? TrickleRequest.fromJSON(object.trickle) : undefined,\n addTrack: isSet(object.addTrack) ? AddTrackRequest.fromJSON(object.addTrack) : undefined,\n mute: isSet(object.mute) ? MuteTrackRequest.fromJSON(object.mute) : undefined,\n subscription: isSet(object.subscription)\n ? UpdateSubscription.fromJSON(object.subscription)\n : undefined,\n trackSetting: isSet(object.trackSetting)\n ? UpdateTrackSettings.fromJSON(object.trackSetting)\n : undefined,\n leave: isSet(object.leave) ? LeaveRequest.fromJSON(object.leave) : undefined,\n updateLayers: isSet(object.updateLayers)\n ? UpdateVideoLayers.fromJSON(object.updateLayers)\n : undefined,\n subscriptionPermission: isSet(object.subscriptionPermission)\n ? SubscriptionPermission.fromJSON(object.subscriptionPermission)\n : undefined,\n syncState: isSet(object.syncState) ? SyncState.fromJSON(object.syncState) : undefined,\n simulate: isSet(object.simulate) ? SimulateScenario.fromJSON(object.simulate) : undefined,\n };\n },\n\n toJSON(message: SignalRequest): unknown {\n const obj: any = {};\n message.offer !== undefined &&\n (obj.offer = message.offer ? SessionDescription.toJSON(message.offer) : undefined);\n message.answer !== undefined &&\n (obj.answer = message.answer ? SessionDescription.toJSON(message.answer) : undefined);\n message.trickle !== undefined &&\n (obj.trickle = message.trickle ? TrickleRequest.toJSON(message.trickle) : undefined);\n message.addTrack !== undefined &&\n (obj.addTrack = message.addTrack ? AddTrackRequest.toJSON(message.addTrack) : undefined);\n message.mute !== undefined &&\n (obj.mute = message.mute ? MuteTrackRequest.toJSON(message.mute) : undefined);\n message.subscription !== undefined &&\n (obj.subscription = message.subscription\n ? UpdateSubscription.toJSON(message.subscription)\n : undefined);\n message.trackSetting !== undefined &&\n (obj.trackSetting = message.trackSetting\n ? UpdateTrackSettings.toJSON(message.trackSetting)\n : undefined);\n message.leave !== undefined &&\n (obj.leave = message.leave ? LeaveRequest.toJSON(message.leave) : undefined);\n message.updateLayers !== undefined &&\n (obj.updateLayers = message.updateLayers\n ? UpdateVideoLayers.toJSON(message.updateLayers)\n : undefined);\n message.subscriptionPermission !== undefined &&\n (obj.subscriptionPermission = message.subscriptionPermission\n ? SubscriptionPermission.toJSON(message.subscriptionPermission)\n : undefined);\n message.syncState !== undefined &&\n (obj.syncState = message.syncState ? SyncState.toJSON(message.syncState) : undefined);\n message.simulate !== undefined &&\n (obj.simulate = message.simulate ? SimulateScenario.toJSON(message.simulate) : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SignalRequest>, I>>(object: I): SignalRequest {\n const message = createBaseSignalRequest();\n message.offer =\n object.offer !== undefined && object.offer !== null\n ? SessionDescription.fromPartial(object.offer)\n : undefined;\n message.answer =\n object.answer !== undefined && object.answer !== null\n ? SessionDescription.fromPartial(object.answer)\n : undefined;\n message.trickle =\n object.trickle !== undefined && object.trickle !== null\n ? TrickleRequest.fromPartial(object.trickle)\n : undefined;\n message.addTrack =\n object.addTrack !== undefined && object.addTrack !== null\n ? AddTrackRequest.fromPartial(object.addTrack)\n : undefined;\n message.mute =\n object.mute !== undefined && object.mute !== null\n ? MuteTrackRequest.fromPartial(object.mute)\n : undefined;\n message.subscription =\n object.subscription !== undefined && object.subscription !== null\n ? UpdateSubscription.fromPartial(object.subscription)\n : undefined;\n message.trackSetting =\n object.trackSetting !== undefined && object.trackSetting !== null\n ? UpdateTrackSettings.fromPartial(object.trackSetting)\n : undefined;\n message.leave =\n object.leave !== undefined && object.leave !== null\n ? LeaveRequest.fromPartial(object.leave)\n : undefined;\n message.updateLayers =\n object.updateLayers !== undefined && object.updateLayers !== null\n ? UpdateVideoLayers.fromPartial(object.updateLayers)\n : undefined;\n message.subscriptionPermission =\n object.subscriptionPermission !== undefined && object.subscriptionPermission !== null\n ? SubscriptionPermission.fromPartial(object.subscriptionPermission)\n : undefined;\n message.syncState =\n object.syncState !== undefined && object.syncState !== null\n ? SyncState.fromPartial(object.syncState)\n : undefined;\n message.simulate =\n object.simulate !== undefined && object.simulate !== null\n ? SimulateScenario.fromPartial(object.simulate)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseSignalResponse(): SignalResponse {\n return {\n join: undefined,\n answer: undefined,\n offer: undefined,\n trickle: undefined,\n update: undefined,\n trackPublished: undefined,\n leave: undefined,\n mute: undefined,\n speakersChanged: undefined,\n roomUpdate: undefined,\n connectionQuality: undefined,\n streamStateUpdate: undefined,\n subscribedQualityUpdate: undefined,\n subscriptionPermissionUpdate: undefined,\n refreshToken: undefined,\n trackUnpublished: undefined,\n };\n}\n\nexport const SignalResponse = {\n encode(message: SignalResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.join !== undefined) {\n JoinResponse.encode(message.join, writer.uint32(10).fork()).ldelim();\n }\n if (message.answer !== undefined) {\n SessionDescription.encode(message.answer, writer.uint32(18).fork()).ldelim();\n }\n if (message.offer !== undefined) {\n SessionDescription.encode(message.offer, writer.uint32(26).fork()).ldelim();\n }\n if (message.trickle !== undefined) {\n TrickleRequest.encode(message.trickle, writer.uint32(34).fork()).ldelim();\n }\n if (message.update !== undefined) {\n ParticipantUpdate.encode(message.update, writer.uint32(42).fork()).ldelim();\n }\n if (message.trackPublished !== undefined) {\n TrackPublishedResponse.encode(message.trackPublished, writer.uint32(50).fork()).ldelim();\n }\n if (message.leave !== undefined) {\n LeaveRequest.encode(message.leave, writer.uint32(66).fork()).ldelim();\n }\n if (message.mute !== undefined) {\n MuteTrackRequest.encode(message.mute, writer.uint32(74).fork()).ldelim();\n }\n if (message.speakersChanged !== undefined) {\n SpeakersChanged.encode(message.speakersChanged, writer.uint32(82).fork()).ldelim();\n }\n if (message.roomUpdate !== undefined) {\n RoomUpdate.encode(message.roomUpdate, writer.uint32(90).fork()).ldelim();\n }\n if (message.connectionQuality !== undefined) {\n ConnectionQualityUpdate.encode(message.connectionQuality, writer.uint32(98).fork()).ldelim();\n }\n if (message.streamStateUpdate !== undefined) {\n StreamStateUpdate.encode(message.streamStateUpdate, writer.uint32(106).fork()).ldelim();\n }\n if (message.subscribedQualityUpdate !== undefined) {\n SubscribedQualityUpdate.encode(\n message.subscribedQualityUpdate,\n writer.uint32(114).fork(),\n ).ldelim();\n }\n if (message.subscriptionPermissionUpdate !== undefined) {\n SubscriptionPermissionUpdate.encode(\n message.subscriptionPermissionUpdate,\n writer.uint32(122).fork(),\n ).ldelim();\n }\n if (message.refreshToken !== undefined) {\n writer.uint32(130).string(message.refreshToken);\n }\n if (message.trackUnpublished !== undefined) {\n TrackUnpublishedResponse.encode(message.trackUnpublished, writer.uint32(138).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SignalResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSignalResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.join = JoinResponse.decode(reader, reader.uint32());\n break;\n case 2:\n message.answer = SessionDescription.decode(reader, reader.uint32());\n break;\n case 3:\n message.offer = SessionDescription.decode(reader, reader.uint32());\n break;\n case 4:\n message.trickle = TrickleRequest.decode(reader, reader.uint32());\n break;\n case 5:\n message.update = ParticipantUpdate.decode(reader, reader.uint32());\n break;\n case 6:\n message.trackPublished = TrackPublishedResponse.decode(reader, reader.uint32());\n break;\n case 8:\n message.leave = LeaveRequest.decode(reader, reader.uint32());\n break;\n case 9:\n message.mute = MuteTrackRequest.decode(reader, reader.uint32());\n break;\n case 10:\n message.speakersChanged = SpeakersChanged.decode(reader, reader.uint32());\n break;\n case 11:\n message.roomUpdate = RoomUpdate.decode(reader, reader.uint32());\n break;\n case 12:\n message.connectionQuality = ConnectionQualityUpdate.decode(reader, reader.uint32());\n break;\n case 13:\n message.streamStateUpdate = StreamStateUpdate.decode(reader, reader.uint32());\n break;\n case 14:\n message.subscribedQualityUpdate = SubscribedQualityUpdate.decode(reader, reader.uint32());\n break;\n case 15:\n message.subscriptionPermissionUpdate = SubscriptionPermissionUpdate.decode(\n reader,\n reader.uint32(),\n );\n break;\n case 16:\n message.refreshToken = reader.string();\n break;\n case 17:\n message.trackUnpublished = TrackUnpublishedResponse.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SignalResponse {\n return {\n join: isSet(object.join) ? JoinResponse.fromJSON(object.join) : undefined,\n answer: isSet(object.answer) ? SessionDescription.fromJSON(object.answer) : undefined,\n offer: isSet(object.offer) ? SessionDescription.fromJSON(object.offer) : undefined,\n trickle: isSet(object.trickle) ? TrickleRequest.fromJSON(object.trickle) : undefined,\n update: isSet(object.update) ? ParticipantUpdate.fromJSON(object.update) : undefined,\n trackPublished: isSet(object.trackPublished)\n ? TrackPublishedResponse.fromJSON(object.trackPublished)\n : undefined,\n leave: isSet(object.leave) ? LeaveRequest.fromJSON(object.leave) : undefined,\n mute: isSet(object.mute) ? MuteTrackRequest.fromJSON(object.mute) : undefined,\n speakersChanged: isSet(object.speakersChanged)\n ? SpeakersChanged.fromJSON(object.speakersChanged)\n : undefined,\n roomUpdate: isSet(object.roomUpdate) ? RoomUpdate.fromJSON(object.roomUpdate) : undefined,\n connectionQuality: isSet(object.connectionQuality)\n ? ConnectionQualityUpdate.fromJSON(object.connectionQuality)\n : undefined,\n streamStateUpdate: isSet(object.streamStateUpdate)\n ? StreamStateUpdate.fromJSON(object.streamStateUpdate)\n : undefined,\n subscribedQualityUpdate: isSet(object.subscribedQualityUpdate)\n ? SubscribedQualityUpdate.fromJSON(object.subscribedQualityUpdate)\n : undefined,\n subscriptionPermissionUpdate: isSet(object.subscriptionPermissionUpdate)\n ? SubscriptionPermissionUpdate.fromJSON(object.subscriptionPermissionUpdate)\n : undefined,\n refreshToken: isSet(object.refreshToken) ? String(object.refreshToken) : undefined,\n trackUnpublished: isSet(object.trackUnpublished)\n ? TrackUnpublishedResponse.fromJSON(object.trackUnpublished)\n : undefined,\n };\n },\n\n toJSON(message: SignalResponse): unknown {\n const obj: any = {};\n message.join !== undefined &&\n (obj.join = message.join ? JoinResponse.toJSON(message.join) : undefined);\n message.answer !== undefined &&\n (obj.answer = message.answer ? SessionDescription.toJSON(message.answer) : undefined);\n message.offer !== undefined &&\n (obj.offer = message.offer ? SessionDescription.toJSON(message.offer) : undefined);\n message.trickle !== undefined &&\n (obj.trickle = message.trickle ? TrickleRequest.toJSON(message.trickle) : undefined);\n message.update !== undefined &&\n (obj.update = message.update ? ParticipantUpdate.toJSON(message.update) : undefined);\n message.trackPublished !== undefined &&\n (obj.trackPublished = message.trackPublished\n ? TrackPublishedResponse.toJSON(message.trackPublished)\n : undefined);\n message.leave !== undefined &&\n (obj.leave = message.leave ? LeaveRequest.toJSON(message.leave) : undefined);\n message.mute !== undefined &&\n (obj.mute = message.mute ? MuteTrackRequest.toJSON(message.mute) : undefined);\n message.speakersChanged !== undefined &&\n (obj.speakersChanged = message.speakersChanged\n ? SpeakersChanged.toJSON(message.speakersChanged)\n : undefined);\n message.roomUpdate !== undefined &&\n (obj.roomUpdate = message.roomUpdate ? RoomUpdate.toJSON(message.roomUpdate) : undefined);\n message.connectionQuality !== undefined &&\n (obj.connectionQuality = message.connectionQuality\n ? ConnectionQualityUpdate.toJSON(message.connectionQuality)\n : undefined);\n message.streamStateUpdate !== undefined &&\n (obj.streamStateUpdate = message.streamStateUpdate\n ? StreamStateUpdate.toJSON(message.streamStateUpdate)\n : undefined);\n message.subscribedQualityUpdate !== undefined &&\n (obj.subscribedQualityUpdate = message.subscribedQualityUpdate\n ? SubscribedQualityUpdate.toJSON(message.subscribedQualityUpdate)\n : undefined);\n message.subscriptionPermissionUpdate !== undefined &&\n (obj.subscriptionPermissionUpdate = message.subscriptionPermissionUpdate\n ? SubscriptionPermissionUpdate.toJSON(message.subscriptionPermissionUpdate)\n : undefined);\n message.refreshToken !== undefined && (obj.refreshToken = message.refreshToken);\n message.trackUnpublished !== undefined &&\n (obj.trackUnpublished = message.trackUnpublished\n ? TrackUnpublishedResponse.toJSON(message.trackUnpublished)\n : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SignalResponse>, I>>(object: I): SignalResponse {\n const message = createBaseSignalResponse();\n message.join =\n object.join !== undefined && object.join !== null\n ? JoinResponse.fromPartial(object.join)\n : undefined;\n message.answer =\n object.answer !== undefined && object.answer !== null\n ? SessionDescription.fromPartial(object.answer)\n : undefined;\n message.offer =\n object.offer !== undefined && object.offer !== null\n ? SessionDescription.fromPartial(object.offer)\n : undefined;\n message.trickle =\n object.trickle !== undefined && object.trickle !== null\n ? TrickleRequest.fromPartial(object.trickle)\n : undefined;\n message.update =\n object.update !== undefined && object.update !== null\n ? ParticipantUpdate.fromPartial(object.update)\n : undefined;\n message.trackPublished =\n object.trackPublished !== undefined && object.trackPublished !== null\n ? TrackPublishedResponse.fromPartial(object.trackPublished)\n : undefined;\n message.leave =\n object.leave !== undefined && object.leave !== null\n ? LeaveRequest.fromPartial(object.leave)\n : undefined;\n message.mute =\n object.mute !== undefined && object.mute !== null\n ? MuteTrackRequest.fromPartial(object.mute)\n : undefined;\n message.speakersChanged =\n object.speakersChanged !== undefined && object.speakersChanged !== null\n ? SpeakersChanged.fromPartial(object.speakersChanged)\n : undefined;\n message.roomUpdate =\n object.roomUpdate !== undefined && object.roomUpdate !== null\n ? RoomUpdate.fromPartial(object.roomUpdate)\n : undefined;\n message.connectionQuality =\n object.connectionQuality !== undefined && object.connectionQuality !== null\n ? ConnectionQualityUpdate.fromPartial(object.connectionQuality)\n : undefined;\n message.streamStateUpdate =\n object.streamStateUpdate !== undefined && object.streamStateUpdate !== null\n ? StreamStateUpdate.fromPartial(object.streamStateUpdate)\n : undefined;\n message.subscribedQualityUpdate =\n object.subscribedQualityUpdate !== undefined && object.subscribedQualityUpdate !== null\n ? SubscribedQualityUpdate.fromPartial(object.subscribedQualityUpdate)\n : undefined;\n message.subscriptionPermissionUpdate =\n object.subscriptionPermissionUpdate !== undefined &&\n object.subscriptionPermissionUpdate !== null\n ? SubscriptionPermissionUpdate.fromPartial(object.subscriptionPermissionUpdate)\n : undefined;\n message.refreshToken = object.refreshToken ?? undefined;\n message.trackUnpublished =\n object.trackUnpublished !== undefined && object.trackUnpublished !== null\n ? TrackUnpublishedResponse.fromPartial(object.trackUnpublished)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseAddTrackRequest(): AddTrackRequest {\n return {\n cid: '',\n name: '',\n type: 0,\n width: 0,\n height: 0,\n muted: false,\n disableDtx: false,\n source: 0,\n layers: [],\n };\n}\n\nexport const AddTrackRequest = {\n encode(message: AddTrackRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.cid !== '') {\n writer.uint32(10).string(message.cid);\n }\n if (message.name !== '') {\n writer.uint32(18).string(message.name);\n }\n if (message.type !== 0) {\n writer.uint32(24).int32(message.type);\n }\n if (message.width !== 0) {\n writer.uint32(32).uint32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(40).uint32(message.height);\n }\n if (message.muted === true) {\n writer.uint32(48).bool(message.muted);\n }\n if (message.disableDtx === true) {\n writer.uint32(56).bool(message.disableDtx);\n }\n if (message.source !== 0) {\n writer.uint32(64).int32(message.source);\n }\n for (const v of message.layers) {\n VideoLayer.encode(v!, writer.uint32(74).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): AddTrackRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseAddTrackRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.cid = reader.string();\n break;\n case 2:\n message.name = reader.string();\n break;\n case 3:\n message.type = reader.int32() as any;\n break;\n case 4:\n message.width = reader.uint32();\n break;\n case 5:\n message.height = reader.uint32();\n break;\n case 6:\n message.muted = reader.bool();\n break;\n case 7:\n message.disableDtx = reader.bool();\n break;\n case 8:\n message.source = reader.int32() as any;\n break;\n case 9:\n message.layers.push(VideoLayer.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): AddTrackRequest {\n return {\n cid: isSet(object.cid) ? String(object.cid) : '',\n name: isSet(object.name) ? String(object.name) : '',\n type: isSet(object.type) ? trackTypeFromJSON(object.type) : 0,\n width: isSet(object.width) ? Number(object.width) : 0,\n height: isSet(object.height) ? Number(object.height) : 0,\n muted: isSet(object.muted) ? Boolean(object.muted) : false,\n disableDtx: isSet(object.disableDtx) ? Boolean(object.disableDtx) : false,\n source: isSet(object.source) ? trackSourceFromJSON(object.source) : 0,\n layers: Array.isArray(object?.layers)\n ? object.layers.map((e: any) => VideoLayer.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: AddTrackRequest): unknown {\n const obj: any = {};\n message.cid !== undefined && (obj.cid = message.cid);\n message.name !== undefined && (obj.name = message.name);\n message.type !== undefined && (obj.type = trackTypeToJSON(message.type));\n message.width !== undefined && (obj.width = Math.round(message.width));\n message.height !== undefined && (obj.height = Math.round(message.height));\n message.muted !== undefined && (obj.muted = message.muted);\n message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);\n message.source !== undefined && (obj.source = trackSourceToJSON(message.source));\n if (message.layers) {\n obj.layers = message.layers.map((e) => (e ? VideoLayer.toJSON(e) : undefined));\n } else {\n obj.layers = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<AddTrackRequest>, I>>(object: I): AddTrackRequest {\n const message = createBaseAddTrackRequest();\n message.cid = object.cid ?? '';\n message.name = object.name ?? '';\n message.type = object.type ?? 0;\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n message.muted = object.muted ?? false;\n message.disableDtx = object.disableDtx ?? false;\n message.source = object.source ?? 0;\n message.layers = object.layers?.map((e) => VideoLayer.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseTrickleRequest(): TrickleRequest {\n return { candidateInit: '', target: 0 };\n}\n\nexport const TrickleRequest = {\n encode(message: TrickleRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.candidateInit !== '') {\n writer.uint32(10).string(message.candidateInit);\n }\n if (message.target !== 0) {\n writer.uint32(16).int32(message.target);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TrickleRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrickleRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.candidateInit = reader.string();\n break;\n case 2:\n message.target = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): TrickleRequest {\n return {\n candidateInit: isSet(object.candidateInit) ? String(object.candidateInit) : '',\n target: isSet(object.target) ? signalTargetFromJSON(object.target) : 0,\n };\n },\n\n toJSON(message: TrickleRequest): unknown {\n const obj: any = {};\n message.candidateInit !== undefined && (obj.candidateInit = message.candidateInit);\n message.target !== undefined && (obj.target = signalTargetToJSON(message.target));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<TrickleRequest>, I>>(object: I): TrickleRequest {\n const message = createBaseTrickleRequest();\n message.candidateInit = object.candidateInit ?? '';\n message.target = object.target ?? 0;\n return message;\n },\n};\n\nfunction createBaseMuteTrackRequest(): MuteTrackRequest {\n return { sid: '', muted: false };\n}\n\nexport const MuteTrackRequest = {\n encode(message: MuteTrackRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.sid !== '') {\n writer.uint32(10).string(message.sid);\n }\n if (message.muted === true) {\n writer.uint32(16).bool(message.muted);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): MuteTrackRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMuteTrackRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.sid = reader.string();\n break;\n case 2:\n message.muted = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): MuteTrackRequest {\n return {\n sid: isSet(object.sid) ? String(object.sid) : '',\n muted: isSet(object.muted) ? Boolean(object.muted) : false,\n };\n },\n\n toJSON(message: MuteTrackRequest): unknown {\n const obj: any = {};\n message.sid !== undefined && (obj.sid = message.sid);\n message.muted !== undefined && (obj.muted = message.muted);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<MuteTrackRequest>, I>>(object: I): MuteTrackRequest {\n const message = createBaseMuteTrackRequest();\n message.sid = object.sid ?? '';\n message.muted = object.muted ?? false;\n return message;\n },\n};\n\nfunction createBaseJoinResponse(): JoinResponse {\n return {\n room: undefined,\n participant: undefined,\n otherParticipants: [],\n serverVersion: '',\n iceServers: [],\n subscriberPrimary: false,\n alternativeUrl: '',\n clientConfiguration: undefined,\n serverRegion: '',\n };\n}\n\nexport const JoinResponse = {\n encode(message: JoinResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.room !== undefined) {\n Room.encode(message.room, writer.uint32(10).fork()).ldelim();\n }\n if (message.participant !== undefined) {\n ParticipantInfo.encode(message.participant, writer.uint32(18).fork()).ldelim();\n }\n for (const v of message.otherParticipants) {\n ParticipantInfo.encode(v!, writer.uint32(26).fork()).ldelim();\n }\n if (message.serverVersion !== '') {\n writer.uint32(34).string(message.serverVersion);\n }\n for (const v of message.iceServers) {\n ICEServer.encode(v!, writer.uint32(42).fork()).ldelim();\n }\n if (message.subscriberPrimary === true) {\n writer.uint32(48).bool(message.subscriberPrimary);\n }\n if (message.alternativeUrl !== '') {\n writer.uint32(58).string(message.alternativeUrl);\n }\n if (message.clientConfiguration !== undefined) {\n ClientConfiguration.encode(message.clientConfiguration, writer.uint32(66).fork()).ldelim();\n }\n if (message.serverRegion !== '') {\n writer.uint32(74).string(message.serverRegion);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): JoinResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseJoinResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.room = Room.decode(reader, reader.uint32());\n break;\n case 2:\n message.participant = ParticipantInfo.decode(reader, reader.uint32());\n break;\n case 3:\n message.otherParticipants.push(ParticipantInfo.decode(reader, reader.uint32()));\n break;\n case 4:\n message.serverVersion = reader.string();\n break;\n case 5:\n message.iceServers.push(ICEServer.decode(reader, reader.uint32()));\n break;\n case 6:\n message.subscriberPrimary = reader.bool();\n break;\n case 7:\n message.alternativeUrl = reader.string();\n break;\n case 8:\n message.clientConfiguration = ClientConfiguration.decode(reader, reader.uint32());\n break;\n case 9:\n message.serverRegion = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): JoinResponse {\n return {\n room: isSet(object.room) ? Room.fromJSON(object.room) : undefined,\n participant: isSet(object.participant)\n ? ParticipantInfo.fromJSON(object.participant)\n : undefined,\n otherParticipants: Array.isArray(object?.otherParticipants)\n ? object.otherParticipants.map((e: any) => ParticipantInfo.fromJSON(e))\n : [],\n serverVersion: isSet(object.serverVersion) ? String(object.serverVersion) : '',\n iceServers: Array.isArray(object?.iceServers)\n ? object.iceServers.map((e: any) => ICEServer.fromJSON(e))\n : [],\n subscriberPrimary: isSet(object.subscriberPrimary)\n ? Boolean(object.subscriberPrimary)\n : false,\n alternativeUrl: isSet(object.alternativeUrl) ? String(object.alternativeUrl) : '',\n clientConfiguration: isSet(object.clientConfiguration)\n ? ClientConfiguration.fromJSON(object.clientConfiguration)\n : undefined,\n serverRegion: isSet(object.serverRegion) ? String(object.serverRegion) : '',\n };\n },\n\n toJSON(message: JoinResponse): unknown {\n const obj: any = {};\n message.room !== undefined && (obj.room = message.room ? Room.toJSON(message.room) : undefined);\n message.participant !== undefined &&\n (obj.participant = message.participant\n ? ParticipantInfo.toJSON(message.participant)\n : undefined);\n if (message.otherParticipants) {\n obj.otherParticipants = message.otherParticipants.map((e) =>\n e ? ParticipantInfo.toJSON(e) : undefined,\n );\n } else {\n obj.otherParticipants = [];\n }\n message.serverVersion !== undefined && (obj.serverVersion = message.serverVersion);\n if (message.iceServers) {\n obj.iceServers = message.iceServers.map((e) => (e ? ICEServer.toJSON(e) : undefined));\n } else {\n obj.iceServers = [];\n }\n message.subscriberPrimary !== undefined && (obj.subscriberPrimary = message.subscriberPrimary);\n message.alternativeUrl !== undefined && (obj.alternativeUrl = message.alternativeUrl);\n message.clientConfiguration !== undefined &&\n (obj.clientConfiguration = message.clientConfiguration\n ? ClientConfiguration.toJSON(message.clientConfiguration)\n : undefined);\n message.serverRegion !== undefined && (obj.serverRegion = message.serverRegion);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<JoinResponse>, I>>(object: I): JoinResponse {\n const message = createBaseJoinResponse();\n message.room =\n object.room !== undefined && object.room !== null ? Room.fromPartial(object.room) : undefined;\n message.participant =\n object.participant !== undefined && object.participant !== null\n ? ParticipantInfo.fromPartial(object.participant)\n : undefined;\n message.otherParticipants =\n object.otherParticipants?.map((e) => ParticipantInfo.fromPartial(e)) || [];\n message.serverVersion = object.serverVersion ?? '';\n message.iceServers = object.iceServers?.map((e) => ICEServer.fromPartial(e)) || [];\n message.subscriberPrimary = object.subscriberPrimary ?? false;\n message.alternativeUrl = object.alternativeUrl ?? '';\n message.clientConfiguration =\n object.clientConfiguration !== undefined && object.clientConfiguration !== null\n ? ClientConfiguration.fromPartial(object.clientConfiguration)\n : undefined;\n message.serverRegion = object.serverRegion ?? '';\n return message;\n },\n};\n\nfunction createBaseTrackPublishedResponse(): TrackPublishedResponse {\n return { cid: '', track: undefined };\n}\n\nexport const TrackPublishedResponse = {\n encode(message: TrackPublishedResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.cid !== '') {\n writer.uint32(10).string(message.cid);\n }\n if (message.track !== undefined) {\n TrackInfo.encode(message.track, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TrackPublishedResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackPublishedResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.cid = reader.string();\n break;\n case 2:\n message.track = TrackInfo.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): TrackPublishedResponse {\n return {\n cid: isSet(object.cid) ? String(object.cid) : '',\n track: isSet(object.track) ? TrackInfo.fromJSON(object.track) : undefined,\n };\n },\n\n toJSON(message: TrackPublishedResponse): unknown {\n const obj: any = {};\n message.cid !== undefined && (obj.cid = message.cid);\n message.track !== undefined &&\n (obj.track = message.track ? TrackInfo.toJSON(message.track) : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<TrackPublishedResponse>, I>>(\n object: I,\n ): TrackPublishedResponse {\n const message = createBaseTrackPublishedResponse();\n message.cid = object.cid ?? '';\n message.track =\n object.track !== undefined && object.track !== null\n ? TrackInfo.fromPartial(object.track)\n : undefined;\n return message;\n },\n};\n\nfunction createBaseTrackUnpublishedResponse(): TrackUnpublishedResponse {\n return { trackSid: '' };\n}\n\nexport const TrackUnpublishedResponse = {\n encode(message: TrackUnpublishedResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.trackSid !== '') {\n writer.uint32(10).string(message.trackSid);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TrackUnpublishedResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackUnpublishedResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.trackSid = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): TrackUnpublishedResponse {\n return {\n trackSid: isSet(object.trackSid) ? String(object.trackSid) : '',\n };\n },\n\n toJSON(message: TrackUnpublishedResponse): unknown {\n const obj: any = {};\n message.trackSid !== undefined && (obj.trackSid = message.trackSid);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<TrackUnpublishedResponse>, I>>(\n object: I,\n ): TrackUnpublishedResponse {\n const message = createBaseTrackUnpublishedResponse();\n message.trackSid = object.trackSid ?? '';\n return message;\n },\n};\n\nfunction createBaseSessionDescription(): SessionDescription {\n return { type: '', sdp: '' };\n}\n\nexport const SessionDescription = {\n encode(message: SessionDescription, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.type !== '') {\n writer.uint32(10).string(message.type);\n }\n if (message.sdp !== '') {\n writer.uint32(18).string(message.sdp);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SessionDescription {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSessionDescription();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.type = reader.string();\n break;\n case 2:\n message.sdp = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SessionDescription {\n return {\n type: isSet(object.type) ? String(object.type) : '',\n sdp: isSet(object.sdp) ? String(object.sdp) : '',\n };\n },\n\n toJSON(message: SessionDescription): unknown {\n const obj: any = {};\n message.type !== undefined && (obj.type = message.type);\n message.sdp !== undefined && (obj.sdp = message.sdp);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SessionDescription>, I>>(object: I): SessionDescription {\n const message = createBaseSessionDescription();\n message.type = object.type ?? '';\n message.sdp = object.sdp ?? '';\n return message;\n },\n};\n\nfunction createBaseParticipantUpdate(): ParticipantUpdate {\n return { participants: [] };\n}\n\nexport const ParticipantUpdate = {\n encode(message: ParticipantUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.participants) {\n ParticipantInfo.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseParticipantUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participants.push(ParticipantInfo.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ParticipantUpdate {\n return {\n participants: Array.isArray(object?.participants)\n ? object.participants.map((e: any) => ParticipantInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ParticipantUpdate): unknown {\n const obj: any = {};\n if (message.participants) {\n obj.participants = message.participants.map((e) =>\n e ? ParticipantInfo.toJSON(e) : undefined,\n );\n } else {\n obj.participants = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ParticipantUpdate>, I>>(object: I): ParticipantUpdate {\n const message = createBaseParticipantUpdate();\n message.participants = object.participants?.map((e) => ParticipantInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseUpdateSubscription(): UpdateSubscription {\n return { trackSids: [], subscribe: false, participantTracks: [] };\n}\n\nexport const UpdateSubscription = {\n encode(message: UpdateSubscription, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.trackSids) {\n writer.uint32(10).string(v!);\n }\n if (message.subscribe === true) {\n writer.uint32(16).bool(message.subscribe);\n }\n for (const v of message.participantTracks) {\n ParticipantTracks.encode(v!, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): UpdateSubscription {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateSubscription();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.trackSids.push(reader.string());\n break;\n case 2:\n message.subscribe = reader.bool();\n break;\n case 3:\n message.participantTracks.push(ParticipantTracks.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): UpdateSubscription {\n return {\n trackSids: Array.isArray(object?.trackSids)\n ? object.trackSids.map((e: any) => String(e))\n : [],\n subscribe: isSet(object.subscribe) ? Boolean(object.subscribe) : false,\n participantTracks: Array.isArray(object?.participantTracks)\n ? object.participantTracks.map((e: any) => ParticipantTracks.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: UpdateSubscription): unknown {\n const obj: any = {};\n if (message.trackSids) {\n obj.trackSids = message.trackSids.map((e) => e);\n } else {\n obj.trackSids = [];\n }\n message.subscribe !== undefined && (obj.subscribe = message.subscribe);\n if (message.participantTracks) {\n obj.participantTracks = message.participantTracks.map((e) =>\n e ? ParticipantTracks.toJSON(e) : undefined,\n );\n } else {\n obj.participantTracks = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<UpdateSubscription>, I>>(object: I): UpdateSubscription {\n const message = createBaseUpdateSubscription();\n message.trackSids = object.trackSids?.map((e) => e) || [];\n message.subscribe = object.subscribe ?? false;\n message.participantTracks =\n object.participantTracks?.map((e) => ParticipantTracks.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseUpdateTrackSettings(): UpdateTrackSettings {\n return { trackSids: [], disabled: false, quality: 0, width: 0, height: 0 };\n}\n\nexport const UpdateTrackSettings = {\n encode(message: UpdateTrackSettings, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.trackSids) {\n writer.uint32(10).string(v!);\n }\n if (message.disabled === true) {\n writer.uint32(24).bool(message.disabled);\n }\n if (message.quality !== 0) {\n writer.uint32(32).int32(message.quality);\n }\n if (message.width !== 0) {\n writer.uint32(40).uint32(message.width);\n }\n if (message.height !== 0) {\n writer.uint32(48).uint32(message.height);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): UpdateTrackSettings {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateTrackSettings();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.trackSids.push(reader.string());\n break;\n case 3:\n message.disabled = reader.bool();\n break;\n case 4:\n message.quality = reader.int32() as any;\n break;\n case 5:\n message.width = reader.uint32();\n break;\n case 6:\n message.height = reader.uint32();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): UpdateTrackSettings {\n return {\n trackSids: Array.isArray(object?.trackSids)\n ? object.trackSids.map((e: any) => String(e))\n : [],\n disabled: isSet(object.disabled) ? Boolean(object.disabled) : false,\n quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,\n width: isSet(object.width) ? Number(object.width) : 0,\n height: isSet(object.height) ? Number(object.height) : 0,\n };\n },\n\n toJSON(message: UpdateTrackSettings): unknown {\n const obj: any = {};\n if (message.trackSids) {\n obj.trackSids = message.trackSids.map((e) => e);\n } else {\n obj.trackSids = [];\n }\n message.disabled !== undefined && (obj.disabled = message.disabled);\n message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));\n message.width !== undefined && (obj.width = Math.round(message.width));\n message.height !== undefined && (obj.height = Math.round(message.height));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<UpdateTrackSettings>, I>>(\n object: I,\n ): UpdateTrackSettings {\n const message = createBaseUpdateTrackSettings();\n message.trackSids = object.trackSids?.map((e) => e) || [];\n message.disabled = object.disabled ?? false;\n message.quality = object.quality ?? 0;\n message.width = object.width ?? 0;\n message.height = object.height ?? 0;\n return message;\n },\n};\n\nfunction createBaseLeaveRequest(): LeaveRequest {\n return { canReconnect: false };\n}\n\nexport const LeaveRequest = {\n encode(message: LeaveRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.canReconnect === true) {\n writer.uint32(8).bool(message.canReconnect);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LeaveRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLeaveRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.canReconnect = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): LeaveRequest {\n return {\n canReconnect: isSet(object.canReconnect) ? Boolean(object.canReconnect) : false,\n };\n },\n\n toJSON(message: LeaveRequest): unknown {\n const obj: any = {};\n message.canReconnect !== undefined && (obj.canReconnect = message.canReconnect);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<LeaveRequest>, I>>(object: I): LeaveRequest {\n const message = createBaseLeaveRequest();\n message.canReconnect = object.canReconnect ?? false;\n return message;\n },\n};\n\nfunction createBaseUpdateVideoLayers(): UpdateVideoLayers {\n return { trackSid: '', layers: [] };\n}\n\nexport const UpdateVideoLayers = {\n encode(message: UpdateVideoLayers, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.trackSid !== '') {\n writer.uint32(10).string(message.trackSid);\n }\n for (const v of message.layers) {\n VideoLayer.encode(v!, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): UpdateVideoLayers {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseUpdateVideoLayers();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.trackSid = reader.string();\n break;\n case 2:\n message.layers.push(VideoLayer.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): UpdateVideoLayers {\n return {\n trackSid: isSet(object.trackSid) ? String(object.trackSid) : '',\n layers: Array.isArray(object?.layers)\n ? object.layers.map((e: any) => VideoLayer.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: UpdateVideoLayers): unknown {\n const obj: any = {};\n message.trackSid !== undefined && (obj.trackSid = message.trackSid);\n if (message.layers) {\n obj.layers = message.layers.map((e) => (e ? VideoLayer.toJSON(e) : undefined));\n } else {\n obj.layers = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<UpdateVideoLayers>, I>>(object: I): UpdateVideoLayers {\n const message = createBaseUpdateVideoLayers();\n message.trackSid = object.trackSid ?? '';\n message.layers = object.layers?.map((e) => VideoLayer.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseICEServer(): ICEServer {\n return { urls: [], username: '', credential: '' };\n}\n\nexport const ICEServer = {\n encode(message: ICEServer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.urls) {\n writer.uint32(10).string(v!);\n }\n if (message.username !== '') {\n writer.uint32(18).string(message.username);\n }\n if (message.credential !== '') {\n writer.uint32(26).string(message.credential);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ICEServer {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseICEServer();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.urls.push(reader.string());\n break;\n case 2:\n message.username = reader.string();\n break;\n case 3:\n message.credential = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ICEServer {\n return {\n urls: Array.isArray(object?.urls) ? object.urls.map((e: any) => String(e)) : [],\n username: isSet(object.username) ? String(object.username) : '',\n credential: isSet(object.credential) ? String(object.credential) : '',\n };\n },\n\n toJSON(message: ICEServer): unknown {\n const obj: any = {};\n if (message.urls) {\n obj.urls = message.urls.map((e) => e);\n } else {\n obj.urls = [];\n }\n message.username !== undefined && (obj.username = message.username);\n message.credential !== undefined && (obj.credential = message.credential);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ICEServer>, I>>(object: I): ICEServer {\n const message = createBaseICEServer();\n message.urls = object.urls?.map((e) => e) || [];\n message.username = object.username ?? '';\n message.credential = object.credential ?? '';\n return message;\n },\n};\n\nfunction createBaseSpeakersChanged(): SpeakersChanged {\n return { speakers: [] };\n}\n\nexport const SpeakersChanged = {\n encode(message: SpeakersChanged, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.speakers) {\n SpeakerInfo.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SpeakersChanged {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSpeakersChanged();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SpeakersChanged {\n return {\n speakers: Array.isArray(object?.speakers)\n ? object.speakers.map((e: any) => SpeakerInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: SpeakersChanged): unknown {\n const obj: any = {};\n if (message.speakers) {\n obj.speakers = message.speakers.map((e) => (e ? SpeakerInfo.toJSON(e) : undefined));\n } else {\n obj.speakers = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SpeakersChanged>, I>>(object: I): SpeakersChanged {\n const message = createBaseSpeakersChanged();\n message.speakers = object.speakers?.map((e) => SpeakerInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseRoomUpdate(): RoomUpdate {\n return { room: undefined };\n}\n\nexport const RoomUpdate = {\n encode(message: RoomUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.room !== undefined) {\n Room.encode(message.room, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): RoomUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseRoomUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.room = Room.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): RoomUpdate {\n return {\n room: isSet(object.room) ? Room.fromJSON(object.room) : undefined,\n };\n },\n\n toJSON(message: RoomUpdate): unknown {\n const obj: any = {};\n message.room !== undefined && (obj.room = message.room ? Room.toJSON(message.room) : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<RoomUpdate>, I>>(object: I): RoomUpdate {\n const message = createBaseRoomUpdate();\n message.room =\n object.room !== undefined && object.room !== null ? Room.fromPartial(object.room) : undefined;\n return message;\n },\n};\n\nfunction createBaseConnectionQualityInfo(): ConnectionQualityInfo {\n return { participantSid: '', quality: 0, score: 0 };\n}\n\nexport const ConnectionQualityInfo = {\n encode(message: ConnectionQualityInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.participantSid !== '') {\n writer.uint32(10).string(message.participantSid);\n }\n if (message.quality !== 0) {\n writer.uint32(16).int32(message.quality);\n }\n if (message.score !== 0) {\n writer.uint32(29).float(message.score);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ConnectionQualityInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConnectionQualityInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participantSid = reader.string();\n break;\n case 2:\n message.quality = reader.int32() as any;\n break;\n case 3:\n message.score = reader.float();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ConnectionQualityInfo {\n return {\n participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',\n quality: isSet(object.quality) ? connectionQualityFromJSON(object.quality) : 0,\n score: isSet(object.score) ? Number(object.score) : 0,\n };\n },\n\n toJSON(message: ConnectionQualityInfo): unknown {\n const obj: any = {};\n message.participantSid !== undefined && (obj.participantSid = message.participantSid);\n message.quality !== undefined && (obj.quality = connectionQualityToJSON(message.quality));\n message.score !== undefined && (obj.score = message.score);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ConnectionQualityInfo>, I>>(\n object: I,\n ): ConnectionQualityInfo {\n const message = createBaseConnectionQualityInfo();\n message.participantSid = object.participantSid ?? '';\n message.quality = object.quality ?? 0;\n message.score = object.score ?? 0;\n return message;\n },\n};\n\nfunction createBaseConnectionQualityUpdate(): ConnectionQualityUpdate {\n return { updates: [] };\n}\n\nexport const ConnectionQualityUpdate = {\n encode(message: ConnectionQualityUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.updates) {\n ConnectionQualityInfo.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ConnectionQualityUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseConnectionQualityUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.updates.push(ConnectionQualityInfo.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ConnectionQualityUpdate {\n return {\n updates: Array.isArray(object?.updates)\n ? object.updates.map((e: any) => ConnectionQualityInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: ConnectionQualityUpdate): unknown {\n const obj: any = {};\n if (message.updates) {\n obj.updates = message.updates.map((e) => (e ? ConnectionQualityInfo.toJSON(e) : undefined));\n } else {\n obj.updates = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ConnectionQualityUpdate>, I>>(\n object: I,\n ): ConnectionQualityUpdate {\n const message = createBaseConnectionQualityUpdate();\n message.updates = object.updates?.map((e) => ConnectionQualityInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseStreamStateInfo(): StreamStateInfo {\n return { participantSid: '', trackSid: '', state: 0 };\n}\n\nexport const StreamStateInfo = {\n encode(message: StreamStateInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.participantSid !== '') {\n writer.uint32(10).string(message.participantSid);\n }\n if (message.trackSid !== '') {\n writer.uint32(18).string(message.trackSid);\n }\n if (message.state !== 0) {\n writer.uint32(24).int32(message.state);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): StreamStateInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStreamStateInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participantSid = reader.string();\n break;\n case 2:\n message.trackSid = reader.string();\n break;\n case 3:\n message.state = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): StreamStateInfo {\n return {\n participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',\n trackSid: isSet(object.trackSid) ? String(object.trackSid) : '',\n state: isSet(object.state) ? streamStateFromJSON(object.state) : 0,\n };\n },\n\n toJSON(message: StreamStateInfo): unknown {\n const obj: any = {};\n message.participantSid !== undefined && (obj.participantSid = message.participantSid);\n message.trackSid !== undefined && (obj.trackSid = message.trackSid);\n message.state !== undefined && (obj.state = streamStateToJSON(message.state));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<StreamStateInfo>, I>>(object: I): StreamStateInfo {\n const message = createBaseStreamStateInfo();\n message.participantSid = object.participantSid ?? '';\n message.trackSid = object.trackSid ?? '';\n message.state = object.state ?? 0;\n return message;\n },\n};\n\nfunction createBaseStreamStateUpdate(): StreamStateUpdate {\n return { streamStates: [] };\n}\n\nexport const StreamStateUpdate = {\n encode(message: StreamStateUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.streamStates) {\n StreamStateInfo.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): StreamStateUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStreamStateUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.streamStates.push(StreamStateInfo.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): StreamStateUpdate {\n return {\n streamStates: Array.isArray(object?.streamStates)\n ? object.streamStates.map((e: any) => StreamStateInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: StreamStateUpdate): unknown {\n const obj: any = {};\n if (message.streamStates) {\n obj.streamStates = message.streamStates.map((e) =>\n e ? StreamStateInfo.toJSON(e) : undefined,\n );\n } else {\n obj.streamStates = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<StreamStateUpdate>, I>>(object: I): StreamStateUpdate {\n const message = createBaseStreamStateUpdate();\n message.streamStates = object.streamStates?.map((e) => StreamStateInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSubscribedQuality(): SubscribedQuality {\n return { quality: 0, enabled: false };\n}\n\nexport const SubscribedQuality = {\n encode(message: SubscribedQuality, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.quality !== 0) {\n writer.uint32(8).int32(message.quality);\n }\n if (message.enabled === true) {\n writer.uint32(16).bool(message.enabled);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SubscribedQuality {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSubscribedQuality();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.quality = reader.int32() as any;\n break;\n case 2:\n message.enabled = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SubscribedQuality {\n return {\n quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,\n enabled: isSet(object.enabled) ? Boolean(object.enabled) : false,\n };\n },\n\n toJSON(message: SubscribedQuality): unknown {\n const obj: any = {};\n message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));\n message.enabled !== undefined && (obj.enabled = message.enabled);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SubscribedQuality>, I>>(object: I): SubscribedQuality {\n const message = createBaseSubscribedQuality();\n message.quality = object.quality ?? 0;\n message.enabled = object.enabled ?? false;\n return message;\n },\n};\n\nfunction createBaseSubscribedQualityUpdate(): SubscribedQualityUpdate {\n return { trackSid: '', subscribedQualities: [] };\n}\n\nexport const SubscribedQualityUpdate = {\n encode(message: SubscribedQualityUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.trackSid !== '') {\n writer.uint32(10).string(message.trackSid);\n }\n for (const v of message.subscribedQualities) {\n SubscribedQuality.encode(v!, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SubscribedQualityUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSubscribedQualityUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.trackSid = reader.string();\n break;\n case 2:\n message.subscribedQualities.push(SubscribedQuality.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SubscribedQualityUpdate {\n return {\n trackSid: isSet(object.trackSid) ? String(object.trackSid) : '',\n subscribedQualities: Array.isArray(object?.subscribedQualities)\n ? object.subscribedQualities.map((e: any) => SubscribedQuality.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: SubscribedQualityUpdate): unknown {\n const obj: any = {};\n message.trackSid !== undefined && (obj.trackSid = message.trackSid);\n if (message.subscribedQualities) {\n obj.subscribedQualities = message.subscribedQualities.map((e) =>\n e ? SubscribedQuality.toJSON(e) : undefined,\n );\n } else {\n obj.subscribedQualities = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SubscribedQualityUpdate>, I>>(\n object: I,\n ): SubscribedQualityUpdate {\n const message = createBaseSubscribedQualityUpdate();\n message.trackSid = object.trackSid ?? '';\n message.subscribedQualities =\n object.subscribedQualities?.map((e) => SubscribedQuality.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseTrackPermission(): TrackPermission {\n return { participantSid: '', allTracks: false, trackSids: [], participantIdentity: '' };\n}\n\nexport const TrackPermission = {\n encode(message: TrackPermission, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.participantSid !== '') {\n writer.uint32(10).string(message.participantSid);\n }\n if (message.allTracks === true) {\n writer.uint32(16).bool(message.allTracks);\n }\n for (const v of message.trackSids) {\n writer.uint32(26).string(v!);\n }\n if (message.participantIdentity !== '') {\n writer.uint32(34).string(message.participantIdentity);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TrackPermission {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTrackPermission();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participantSid = reader.string();\n break;\n case 2:\n message.allTracks = reader.bool();\n break;\n case 3:\n message.trackSids.push(reader.string());\n break;\n case 4:\n message.participantIdentity = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): TrackPermission {\n return {\n participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',\n allTracks: isSet(object.allTracks) ? Boolean(object.allTracks) : false,\n trackSids: Array.isArray(object?.trackSids)\n ? object.trackSids.map((e: any) => String(e))\n : [],\n participantIdentity: isSet(object.participantIdentity)\n ? String(object.participantIdentity)\n : '',\n };\n },\n\n toJSON(message: TrackPermission): unknown {\n const obj: any = {};\n message.participantSid !== undefined && (obj.participantSid = message.participantSid);\n message.allTracks !== undefined && (obj.allTracks = message.allTracks);\n if (message.trackSids) {\n obj.trackSids = message.trackSids.map((e) => e);\n } else {\n obj.trackSids = [];\n }\n message.participantIdentity !== undefined &&\n (obj.participantIdentity = message.participantIdentity);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<TrackPermission>, I>>(object: I): TrackPermission {\n const message = createBaseTrackPermission();\n message.participantSid = object.participantSid ?? '';\n message.allTracks = object.allTracks ?? false;\n message.trackSids = object.trackSids?.map((e) => e) || [];\n message.participantIdentity = object.participantIdentity ?? '';\n return message;\n },\n};\n\nfunction createBaseSubscriptionPermission(): SubscriptionPermission {\n return { allParticipants: false, trackPermissions: [] };\n}\n\nexport const SubscriptionPermission = {\n encode(message: SubscriptionPermission, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.allParticipants === true) {\n writer.uint32(8).bool(message.allParticipants);\n }\n for (const v of message.trackPermissions) {\n TrackPermission.encode(v!, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SubscriptionPermission {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSubscriptionPermission();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.allParticipants = reader.bool();\n break;\n case 2:\n message.trackPermissions.push(TrackPermission.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SubscriptionPermission {\n return {\n allParticipants: isSet(object.allParticipants) ? Boolean(object.allParticipants) : false,\n trackPermissions: Array.isArray(object?.trackPermissions)\n ? object.trackPermissions.map((e: any) => TrackPermission.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: SubscriptionPermission): unknown {\n const obj: any = {};\n message.allParticipants !== undefined && (obj.allParticipants = message.allParticipants);\n if (message.trackPermissions) {\n obj.trackPermissions = message.trackPermissions.map((e) =>\n e ? TrackPermission.toJSON(e) : undefined,\n );\n } else {\n obj.trackPermissions = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SubscriptionPermission>, I>>(\n object: I,\n ): SubscriptionPermission {\n const message = createBaseSubscriptionPermission();\n message.allParticipants = object.allParticipants ?? false;\n message.trackPermissions =\n object.trackPermissions?.map((e) => TrackPermission.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseSubscriptionPermissionUpdate(): SubscriptionPermissionUpdate {\n return { participantSid: '', trackSid: '', allowed: false };\n}\n\nexport const SubscriptionPermissionUpdate = {\n encode(\n message: SubscriptionPermissionUpdate,\n writer: _m0.Writer = _m0.Writer.create(),\n ): _m0.Writer {\n if (message.participantSid !== '') {\n writer.uint32(10).string(message.participantSid);\n }\n if (message.trackSid !== '') {\n writer.uint32(18).string(message.trackSid);\n }\n if (message.allowed === true) {\n writer.uint32(24).bool(message.allowed);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SubscriptionPermissionUpdate {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSubscriptionPermissionUpdate();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.participantSid = reader.string();\n break;\n case 2:\n message.trackSid = reader.string();\n break;\n case 3:\n message.allowed = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SubscriptionPermissionUpdate {\n return {\n participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',\n trackSid: isSet(object.trackSid) ? String(object.trackSid) : '',\n allowed: isSet(object.allowed) ? Boolean(object.allowed) : false,\n };\n },\n\n toJSON(message: SubscriptionPermissionUpdate): unknown {\n const obj: any = {};\n message.participantSid !== undefined && (obj.participantSid = message.participantSid);\n message.trackSid !== undefined && (obj.trackSid = message.trackSid);\n message.allowed !== undefined && (obj.allowed = message.allowed);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SubscriptionPermissionUpdate>, I>>(\n object: I,\n ): SubscriptionPermissionUpdate {\n const message = createBaseSubscriptionPermissionUpdate();\n message.participantSid = object.participantSid ?? '';\n message.trackSid = object.trackSid ?? '';\n message.allowed = object.allowed ?? false;\n return message;\n },\n};\n\nfunction createBaseSyncState(): SyncState {\n return { answer: undefined, subscription: undefined, publishTracks: [], dataChannels: [] };\n}\n\nexport const SyncState = {\n encode(message: SyncState, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.answer !== undefined) {\n SessionDescription.encode(message.answer, writer.uint32(10).fork()).ldelim();\n }\n if (message.subscription !== undefined) {\n UpdateSubscription.encode(message.subscription, writer.uint32(18).fork()).ldelim();\n }\n for (const v of message.publishTracks) {\n TrackPublishedResponse.encode(v!, writer.uint32(26).fork()).ldelim();\n }\n for (const v of message.dataChannels) {\n DataChannelInfo.encode(v!, writer.uint32(34).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SyncState {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSyncState();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.answer = SessionDescription.decode(reader, reader.uint32());\n break;\n case 2:\n message.subscription = UpdateSubscription.decode(reader, reader.uint32());\n break;\n case 3:\n message.publishTracks.push(TrackPublishedResponse.decode(reader, reader.uint32()));\n break;\n case 4:\n message.dataChannels.push(DataChannelInfo.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SyncState {\n return {\n answer: isSet(object.answer) ? SessionDescription.fromJSON(object.answer) : undefined,\n subscription: isSet(object.subscription)\n ? UpdateSubscription.fromJSON(object.subscription)\n : undefined,\n publishTracks: Array.isArray(object?.publishTracks)\n ? object.publishTracks.map((e: any) => TrackPublishedResponse.fromJSON(e))\n : [],\n dataChannels: Array.isArray(object?.dataChannels)\n ? object.dataChannels.map((e: any) => DataChannelInfo.fromJSON(e))\n : [],\n };\n },\n\n toJSON(message: SyncState): unknown {\n const obj: any = {};\n message.answer !== undefined &&\n (obj.answer = message.answer ? SessionDescription.toJSON(message.answer) : undefined);\n message.subscription !== undefined &&\n (obj.subscription = message.subscription\n ? UpdateSubscription.toJSON(message.subscription)\n : undefined);\n if (message.publishTracks) {\n obj.publishTracks = message.publishTracks.map((e) =>\n e ? TrackPublishedResponse.toJSON(e) : undefined,\n );\n } else {\n obj.publishTracks = [];\n }\n if (message.dataChannels) {\n obj.dataChannels = message.dataChannels.map((e) =>\n e ? DataChannelInfo.toJSON(e) : undefined,\n );\n } else {\n obj.dataChannels = [];\n }\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SyncState>, I>>(object: I): SyncState {\n const message = createBaseSyncState();\n message.answer =\n object.answer !== undefined && object.answer !== null\n ? SessionDescription.fromPartial(object.answer)\n : undefined;\n message.subscription =\n object.subscription !== undefined && object.subscription !== null\n ? UpdateSubscription.fromPartial(object.subscription)\n : undefined;\n message.publishTracks =\n object.publishTracks?.map((e) => TrackPublishedResponse.fromPartial(e)) || [];\n message.dataChannels = object.dataChannels?.map((e) => DataChannelInfo.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseDataChannelInfo(): DataChannelInfo {\n return { label: '', id: 0, target: 0 };\n}\n\nexport const DataChannelInfo = {\n encode(message: DataChannelInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.label !== '') {\n writer.uint32(10).string(message.label);\n }\n if (message.id !== 0) {\n writer.uint32(16).uint32(message.id);\n }\n if (message.target !== 0) {\n writer.uint32(24).int32(message.target);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DataChannelInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDataChannelInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.label = reader.string();\n break;\n case 2:\n message.id = reader.uint32();\n break;\n case 3:\n message.target = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): DataChannelInfo {\n return {\n label: isSet(object.label) ? String(object.label) : '',\n id: isSet(object.id) ? Number(object.id) : 0,\n target: isSet(object.target) ? signalTargetFromJSON(object.target) : 0,\n };\n },\n\n toJSON(message: DataChannelInfo): unknown {\n const obj: any = {};\n message.label !== undefined && (obj.label = message.label);\n message.id !== undefined && (obj.id = Math.round(message.id));\n message.target !== undefined && (obj.target = signalTargetToJSON(message.target));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<DataChannelInfo>, I>>(object: I): DataChannelInfo {\n const message = createBaseDataChannelInfo();\n message.label = object.label ?? '';\n message.id = object.id ?? 0;\n message.target = object.target ?? 0;\n return message;\n },\n};\n\nfunction createBaseSimulateScenario(): SimulateScenario {\n return {\n speakerUpdate: undefined,\n nodeFailure: undefined,\n migration: undefined,\n serverLeave: undefined,\n };\n}\n\nexport const SimulateScenario = {\n encode(message: SimulateScenario, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.speakerUpdate !== undefined) {\n writer.uint32(8).int32(message.speakerUpdate);\n }\n if (message.nodeFailure !== undefined) {\n writer.uint32(16).bool(message.nodeFailure);\n }\n if (message.migration !== undefined) {\n writer.uint32(24).bool(message.migration);\n }\n if (message.serverLeave !== undefined) {\n writer.uint32(32).bool(message.serverLeave);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SimulateScenario {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSimulateScenario();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.speakerUpdate = reader.int32();\n break;\n case 2:\n message.nodeFailure = reader.bool();\n break;\n case 3:\n message.migration = reader.bool();\n break;\n case 4:\n message.serverLeave = reader.bool();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): SimulateScenario {\n return {\n speakerUpdate: isSet(object.speakerUpdate) ? Number(object.speakerUpdate) : undefined,\n nodeFailure: isSet(object.nodeFailure) ? Boolean(object.nodeFailure) : undefined,\n migration: isSet(object.migration) ? Boolean(object.migration) : undefined,\n serverLeave: isSet(object.serverLeave) ? Boolean(object.serverLeave) : undefined,\n };\n },\n\n toJSON(message: SimulateScenario): unknown {\n const obj: any = {};\n message.speakerUpdate !== undefined && (obj.speakerUpdate = Math.round(message.speakerUpdate));\n message.nodeFailure !== undefined && (obj.nodeFailure = message.nodeFailure);\n message.migration !== undefined && (obj.migration = message.migration);\n message.serverLeave !== undefined && (obj.serverLeave = message.serverLeave);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<SimulateScenario>, I>>(object: I): SimulateScenario {\n const message = createBaseSimulateScenario();\n message.speakerUpdate = object.speakerUpdate ?? undefined;\n message.nodeFailure = object.nodeFailure ?? undefined;\n message.migration = object.migration ?? undefined;\n message.serverLeave = object.serverLeave ?? undefined;\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n","export class LivekitError extends Error {\n code: number;\n\n constructor(code: number, message?: string) {\n super(message || 'an error has occured');\n this.code = code;\n }\n}\n\nexport class ConnectionError extends LivekitError {\n constructor(message?: string) {\n super(1, message);\n }\n}\n\nexport class TrackInvalidError extends LivekitError {\n constructor(message?: string) {\n super(20, message || 'Track is invalid');\n }\n}\n\nexport class UnsupportedServer extends LivekitError {\n constructor(message?: string) {\n super(10, message || 'Unsupported server');\n }\n}\n\nexport class UnexpectedConnectionState extends LivekitError {\n constructor(message?: string) {\n super(12, message || 'Unexpected connection state');\n }\n}\n\nexport class PublishDataError extends LivekitError {\n constructor(message?: string) {\n super(13, message || 'Unable to publish data');\n }\n}\n\nexport enum MediaDeviceFailure {\n // user rejected permissions\n PermissionDenied = 'PermissionDenied',\n // device is not available\n NotFound = 'NotFound',\n // device is in use. On Windows, only a single tab may get access to a device at a time.\n DeviceInUse = 'DeviceInUse',\n Other = 'Other',\n}\n\nexport namespace MediaDeviceFailure {\n export function getFailure(error: any): MediaDeviceFailure | undefined {\n if (error && 'name' in error) {\n if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {\n return MediaDeviceFailure.NotFound;\n }\n if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {\n return MediaDeviceFailure.PermissionDenied;\n }\n if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {\n return MediaDeviceFailure.DeviceInUse;\n }\n return MediaDeviceFailure.Other;\n }\n }\n}\n","/**\n * Events are the primary way LiveKit notifies your application of changes.\n *\n * The following are events emitted by [[Room]], listen to room events like\n *\n * ```typescript\n * room.on(RoomEvent.TrackPublished, (track, publication, participant) => {})\n * ```\n */\n\nexport enum RoomEvent {\n /**\n * When the connection to the server has been interrupted and it's attempting\n * to reconnect.\n */\n Reconnecting = 'reconnecting',\n\n /**\n * Fires when a reconnection has been successful.\n */\n Reconnected = 'reconnected',\n\n /**\n * When disconnected from room. This fires when room.disconnect() is called or\n * when an unrecoverable connection issue had occured\n */\n Disconnected = 'disconnected',\n\n /**\n * Whenever the connection state of the room changes\n *\n * args: ([[RoomState]])\n */\n StateChanged = 'stateChanged',\n\n /**\n * When input or output devices on the machine have changed.\n */\n MediaDevicesChanged = 'mediaDevicesChanged',\n\n /**\n * When a [[RemoteParticipant]] joins *after* the local\n * participant. It will not emit events for participants that are already\n * in the room\n *\n * args: ([[RemoteParticipant]])\n */\n ParticipantConnected = 'participantConnected',\n\n /**\n * When a [[RemoteParticipant]] leaves *after* the local\n * participant has joined.\n *\n * args: ([[RemoteParticipant]])\n */\n ParticipantDisconnected = 'participantDisconnected',\n\n /**\n * When a new track is published to room *after* the local\n * participant has joined. It will not fire for tracks that are already published.\n *\n * A track published doesn't mean the participant has subscribed to it. It's\n * simply reflecting the state of the room.\n *\n * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n TrackPublished = 'trackPublished',\n\n /**\n * The [[LocalParticipant]] has subscribed to a new track. This event will **always**\n * fire as long as new tracks are ready for use.\n *\n * args: ([[RemoteTrack]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n TrackSubscribed = 'trackSubscribed',\n\n /**\n * Could not subscribe to a track\n *\n * args: (track sid, [[RemoteParticipant]])\n */\n TrackSubscriptionFailed = 'trackSubscriptionFailed',\n\n /**\n * A [[RemoteParticipant]] has unpublished a track\n *\n * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n TrackUnpublished = 'trackUnpublished',\n\n /**\n * A subscribed track is no longer available. Clients should listen to this\n * event and ensure they detach tracks.\n *\n * args: ([[Track]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n */\n TrackUnsubscribed = 'trackUnsubscribed',\n\n /**\n * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]], [[Participant]])\n */\n TrackMuted = 'trackMuted',\n\n /**\n * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]], [[Participant]])\n */\n TrackUnmuted = 'trackUnmuted',\n\n /**\n * A local track was published successfully. This event is helpful to know\n * when to update your local UI with the newly published track.\n *\n * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n */\n LocalTrackPublished = 'localTrackPublished',\n\n /**\n * A local track was unpublished. This event is helpful to know when to remove\n * the local track from your UI.\n *\n * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n * this event will also fire.\n *\n * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n */\n LocalTrackUnpublished = 'localTrackUnpublished',\n\n /**\n * Active speakers changed. List of speakers are ordered by their audio level.\n * loudest speakers first. This will include the LocalParticipant too.\n *\n * Speaker updates are sent only to the publishing participant and their subscribers.\n *\n * args: (Array<[[Participant]]>)\n */\n ActiveSpeakersChanged = 'activeSpeakersChanged',\n\n /**\n * @deprecated Use ParticipantMetadataChanged instead\n * @internal\n */\n MetadataChanged = 'metadataChanged',\n\n /**\n * Participant metadata is a simple way for app-specific state to be pushed to\n * all users.\n * When RoomService.UpdateParticipantMetadata is called to change a participant's\n * state, *all* participants in the room will fire this event.\n *\n * args: (prevMetadata: string, [[Participant]])\n *\n */\n ParticipantMetadataChanged = 'participantMetadataChanged',\n\n /**\n * Room metadata is a simple way for app-specific state to be pushed to\n * all users.\n * When RoomService.UpdateRoomMetadata is called to change a room's state,\n * *all* participants in the room will fire this event.\n *\n * args: (string)\n */\n RoomMetadataChanged = 'roomMetadataChanged',\n\n /**\n * Data received from another participant.\n * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n * All participants in the room will receive the messages sent to the room.\n *\n * args: (payload: Uint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]])\n */\n DataReceived = 'dataReceived',\n\n /**\n * Connection quality was changed for a Participant. It'll receive updates\n * from the local participant, as well as any [[RemoteParticipant]]s that we are\n * subscribed to.\n *\n * args: (connectionQuality: [[ConnectionQuality]], participant: [[Participant]])\n */\n ConnectionQualityChanged = 'connectionQualityChanged',\n\n /**\n * StreamState indicates if a subscribed (remote) track has been paused by the SFU\n * (typically this happens because of subscriber's bandwidth constraints)\n *\n * When bandwidth conditions allow, the track will be resumed automatically.\n * TrackStreamStateChanged will also be emitted when that happens.\n *\n * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]],\n * participant: [[RemoteParticipant]])\n */\n TrackStreamStateChanged = 'trackStreamStateChanged',\n\n /**\n * One of subscribed tracks have changed its permissions for the current\n * participant. If permission was revoked, then the track will no longer\n * be subscribed. If permission was granted, a TrackSubscribed event will\n * be emitted.\n *\n * args: (pub: [[RemoteTrackPublication]],\n * status: [[TrackPublication.SubscriptionStatus]],\n * participant: [[RemoteParticipant]])\n */\n TrackSubscriptionPermissionChanged = 'trackSubscriptionPermissionChanged',\n\n /**\n * LiveKit will attempt to autoplay all audio tracks when you attach them to\n * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.\n * `Room.canPlayAudio` will indicate if audio playback is permitted.\n */\n AudioPlaybackStatusChanged = 'audioPlaybackChanged',\n\n /**\n * When we have encountered an error while attempting to create a track.\n * The errors take place in getUserMedia().\n * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.\n * [[getAudioCreateError]] and [[getVideoCreateError]] will indicate if it had\n * an error while creating the audio or video track respectively.\n *\n * args: (error: Error)\n */\n MediaDevicesError = 'mediaDevicesError',\n\n /**\n * A participant's permission has changed. Currently only fired on LocalParticipant.\n * args: (prevPermissions: [[ParticipantPermission]], participant: [[Participant]])\n */\n ParticipantPermissionsChanged = 'participantPermissionsChanged',\n}\n\nexport enum ParticipantEvent {\n /**\n * When a new track is published to room *after* the local\n * participant has joined. It will not fire for tracks that are already published.\n *\n * A track published doesn't mean the participant has subscribed to it. It's\n * simply reflecting the state of the room.\n *\n * args: ([[RemoteTrackPublication]])\n */\n TrackPublished = 'trackPublished',\n\n /**\n * Successfully subscribed to the [[RemoteParticipant]]'s track.\n * This event will **always** fire as long as new tracks are ready for use.\n *\n * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n */\n TrackSubscribed = 'trackSubscribed',\n\n /**\n * Could not subscribe to a track\n *\n * args: (track sid)\n */\n TrackSubscriptionFailed = 'trackSubscriptionFailed',\n\n /**\n * A [[RemoteParticipant]] has unpublished a track\n *\n * args: ([[RemoteTrackPublication]])\n */\n TrackUnpublished = 'trackUnpublished',\n\n /**\n * A subscribed track is no longer available. Clients should listen to this\n * event and ensure they detach tracks.\n *\n * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n */\n TrackUnsubscribed = 'trackUnsubscribed',\n\n /**\n * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]])\n */\n TrackMuted = 'trackMuted',\n\n /**\n * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n *\n * args: ([[TrackPublication]])\n */\n TrackUnmuted = 'trackUnmuted',\n\n /**\n * A local track was published successfully. This event is helpful to know\n * when to update your local UI with the newly published track.\n *\n * args: ([[LocalTrackPublication]])\n */\n LocalTrackPublished = 'localTrackPublished',\n\n /**\n * A local track was unpublished. This event is helpful to know when to remove\n * the local track from your UI.\n *\n * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n * this event will also fire.\n *\n * args: ([[LocalTrackPublication]])\n */\n LocalTrackUnpublished = 'localTrackUnpublished',\n\n /**\n * @deprecated Use ParticipantMetadataChanged instead\n * @internal\n */\n MetadataChanged = 'metadataChanged',\n\n /**\n * Participant metadata is a simple way for app-specific state to be pushed to\n * all users.\n * When RoomService.UpdateParticipantMetadata is called to change a participant's\n * state, *all* participants in the room will fire this event.\n * To access the current metadata, see [[Participant.metadata]].\n *\n * args: (prevMetadata: string)\n *\n */\n ParticipantMetadataChanged = 'participantMetadataChanged',\n\n /**\n * Data received from this participant as sender.\n * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n * All participants in the room will receive the messages sent to the room.\n *\n * args: (payload: Uint8Array, kind: [[DataPacket_Kind]])\n */\n DataReceived = 'dataReceived',\n\n /**\n * Has speaking status changed for the current participant\n *\n * args: (speaking: boolean)\n */\n IsSpeakingChanged = 'isSpeakingChanged',\n\n /**\n * Connection quality was changed for a Participant. It'll receive updates\n * from the local participant, as well as any [[RemoteParticipant]]s that we are\n * subscribed to.\n *\n * args: (connectionQuality: [[ConnectionQuality]])\n */\n ConnectionQualityChanged = 'connectionQualityChanged',\n\n /**\n * StreamState indicates if a subscribed track has been paused by the SFU\n * (typically this happens because of subscriber's bandwidth constraints)\n *\n * When bandwidth conditions allow, the track will be resumed automatically.\n * TrackStreamStateChanged will also be emitted when that happens.\n *\n * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]])\n */\n TrackStreamStateChanged = 'trackStreamStateChanged',\n\n /**\n * One of subscribed tracks have changed its permissions for the current\n * participant. If permission was revoked, then the track will no longer\n * be subscribed. If permission was granted, a TrackSubscribed event will\n * be emitted.\n *\n * args: (pub: [[RemoteTrackPublication]],\n * status: [[TrackPublication.SubscriptionStatus]])\n */\n TrackSubscriptionPermissionChanged = 'trackSubscriptionPermissionChanged',\n\n // fired only on LocalParticipant\n /** @internal */\n MediaDevicesError = 'mediaDevicesError',\n\n /**\n * A participant's permission has changed. Currently only fired on LocalParticipant.\n * args: (prevPermissions: [[ParticipantPermission]])\n */\n ParticipantPermissionsChanged = 'participantPermissionsChanged',\n}\n\n/** @internal */\nexport enum EngineEvent {\n TransportsCreated = 'transportsCreated',\n Connected = 'connected',\n Disconnected = 'disconnected',\n Resuming = 'resuming',\n Resumed = 'resumed',\n Restarting = 'restarting',\n Restarted = 'restarted',\n SignalResumed = 'signalResumed',\n MediaTrackAdded = 'mediaTrackAdded',\n ActiveSpeakersUpdate = 'activeSpeakersUpdate',\n DataPacketReceived = 'dataPacketReceived',\n}\n\nexport enum TrackEvent {\n Message = 'message',\n Muted = 'muted',\n Unmuted = 'unmuted',\n Ended = 'ended',\n /** @internal */\n UpdateSettings = 'updateSettings',\n /** @internal */\n UpdateSubscription = 'updateSubscription',\n /** @internal */\n AudioPlaybackStarted = 'audioPlaybackStarted',\n /** @internal */\n AudioPlaybackFailed = 'audioPlaybackFailed',\n /**\n * @internal\n * Only fires on LocalAudioTrack instances\n */\n AudioSilenceDetected = 'audioSilenceDetected',\n /** @internal */\n VisibilityChanged = 'visibilityChanged',\n /** @internal */\n VideoDimensionsChanged = 'videoDimensionsChanged',\n /** @internal */\n ElementAttached = 'elementAttached',\n /** @internal */\n ElementDetached = 'elementDetached',\n /**\n * @internal\n * Only fires on LocalTracks\n */\n UpstreamPaused = 'upstreamPaused',\n /**\n * @internal\n * Only fires on LocalTracks\n */\n UpstreamResumed = 'upstreamResumed',\n}\n","export const monitorFrequency = 2000;\n\n// key stats for senders and receivers\ninterface SenderStats {\n /** number of packets sent */\n packetsSent?: number;\n\n /** number of bytes sent */\n bytesSent?: number;\n\n /** jitter as perceived by remote */\n jitter?: number;\n\n /** packets reported lost by remote */\n packetsLost?: number;\n\n /** RTT reported by remote */\n roundTripTime?: number;\n\n /** ID of the outbound stream */\n streamId?: string;\n\n timestamp: number;\n}\n\nexport interface AudioSenderStats extends SenderStats {\n type: 'audio';\n}\n\nexport interface VideoSenderStats extends SenderStats {\n type: 'video';\n\n firCount: number;\n\n pliCount: number;\n\n nackCount: number;\n\n rid: string;\n\n frameWidth: number;\n\n frameHeight: number;\n\n framesSent: number;\n\n // bandwidth, cpu, other, none\n qualityLimitationReason: string;\n\n qualityLimitationResolutionChanges: number;\n\n retransmittedPacketsSent: number;\n}\n\ninterface ReceiverStats {\n jitterBufferDelay?: number;\n\n /** packets reported lost by remote */\n packetsLost?: number;\n\n /** number of packets sent */\n packetsReceived?: number;\n\n bytesReceived?: number;\n\n streamId?: string;\n\n jitter?: number;\n\n timestamp: number;\n}\n\nexport interface AudioReceiverStats extends ReceiverStats {\n type: 'audio';\n\n concealedSamples?: number;\n\n concealmentEvents?: number;\n\n silentConcealedSamples?: number;\n\n silentConcealmentEvents?: number;\n\n totalAudioEnergy?: number;\n\n totalSamplesDuration?: number;\n}\n\nexport interface VideoReceiverStats extends ReceiverStats {\n type: 'video';\n\n framesDecoded: number;\n\n framesDropped: number;\n\n framesReceived: number;\n\n frameWidth?: number;\n\n frameHeight?: number;\n\n firCount?: number;\n\n pliCount?: number;\n\n nackCount?: number;\n}\n\nexport function computeBitrate<T extends ReceiverStats | SenderStats>(\n currentStats: T,\n prevStats?: T,\n): number {\n if (!prevStats) {\n return 0;\n }\n let bytesNow: number | undefined;\n let bytesPrev: number | undefined;\n if ('bytesReceived' in currentStats) {\n bytesNow = (currentStats as ReceiverStats).bytesReceived;\n bytesPrev = (prevStats as ReceiverStats).bytesReceived;\n } else if ('bytesSent' in currentStats) {\n bytesNow = (currentStats as SenderStats).bytesSent;\n bytesPrev = (prevStats as SenderStats).bytesSent;\n }\n if (\n bytesNow === undefined ||\n bytesPrev === undefined ||\n currentStats.timestamp === undefined ||\n prevStats.timestamp === undefined\n ) {\n return 0;\n }\n return ((bytesNow - bytesPrev) * 8 * 1000) / (currentStats.timestamp - prevStats.timestamp);\n}\n","const defaultId = 'default';\n\nexport default class DeviceManager {\n private static instance?: DeviceManager;\n\n static mediaDeviceKinds: MediaDeviceKind[] = ['audioinput', 'audiooutput', 'videoinput'];\n\n static getInstance(): DeviceManager {\n if (this.instance === undefined) {\n this.instance = new DeviceManager();\n }\n return this.instance;\n }\n\n async getDevices(\n kind?: MediaDeviceKind,\n requestPermissions: boolean = true,\n ): Promise<MediaDeviceInfo[]> {\n let devices = await navigator.mediaDevices.enumerateDevices();\n\n if (requestPermissions) {\n const isDummyDeviceOrEmpty =\n devices.length === 0 ||\n devices.some((device) => {\n const noLabel = device.label === '';\n const isRelevant = kind ? device.kind === kind : true;\n return noLabel && isRelevant;\n });\n\n if (isDummyDeviceOrEmpty) {\n const permissionsToAcquire = {\n video: kind !== 'audioinput' && kind !== 'audiooutput',\n audio: kind !== 'videoinput',\n };\n await navigator.mediaDevices.getUserMedia(permissionsToAcquire);\n devices = await navigator.mediaDevices.enumerateDevices();\n }\n }\n if (kind) {\n devices = devices.filter((device) => device.kind === kind);\n }\n\n // Chrome returns 'default' devices, we would filter them out, but put the default\n // device at first\n // we would only do this if there are more than 1 device though\n if (devices.length > 1 && devices[0].deviceId === defaultId) {\n // find another device with matching group id, and move that to 0\n const defaultDevice = devices[0];\n for (let i = 1; i < devices.length; i += 1) {\n if (devices[i].groupId === defaultDevice.groupId) {\n const temp = devices[0];\n devices[0] = devices[i];\n devices[i] = temp;\n break;\n }\n }\n return devices.filter((device) => device !== defaultDevice);\n }\n\n return devices;\n }\n\n async normalizeDeviceId(\n kind: MediaDeviceKind,\n deviceId?: string,\n groupId?: string,\n ): Promise<string | undefined> {\n if (deviceId !== defaultId) {\n return deviceId;\n }\n\n // resolve actual device id if it's 'default': Chrome returns it when no\n // device has been chosen\n const devices = await this.getDevices(kind);\n\n const device = devices.find((d) => d.groupId === groupId && d.deviceId !== defaultId);\n\n return device?.deviceId;\n }\n}\n","export const version = '0.18.4';\nexport const protocolVersion = 7;\n","import { ClientInfo, ClientInfo_SDK } from '../proto/livekit_models';\nimport { protocolVersion, version } from '../version';\n\nconst separator = '|';\n\nexport function unpackStreamId(packed: string): string[] {\n const parts = packed.split(separator);\n if (parts.length > 1) {\n return [parts[0], packed.substr(parts[0].length + 1)];\n }\n return [packed, ''];\n}\n\nexport async function sleep(duration: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, duration));\n}\n\nexport function isFireFox(): boolean {\n if (!isWeb()) return false;\n return navigator.userAgent.indexOf('Firefox') !== -1;\n}\n\nexport function isSafari(): boolean {\n if (!isWeb()) return false;\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n}\n\nexport function isMobile(): boolean {\n if (!isWeb()) return false;\n return /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent);\n}\n\nexport function isWeb(): boolean {\n return typeof document !== 'undefined';\n}\n\nfunction roDispatchCallback(entries: ResizeObserverEntry[]) {\n for (const entry of entries) {\n (entry.target as ObservableMediaElement).handleResize(entry);\n }\n}\n\nfunction ioDispatchCallback(entries: IntersectionObserverEntry[]) {\n for (const entry of entries) {\n (entry.target as ObservableMediaElement).handleVisibilityChanged(entry);\n }\n}\n\nlet resizeObserver: ResizeObserver | null = null;\nexport const getResizeObserver = () => {\n if (!resizeObserver) resizeObserver = new ResizeObserver(roDispatchCallback);\n return resizeObserver;\n};\n\nlet intersectionObserver: IntersectionObserver | null = null;\nexport const getIntersectionObserver = () => {\n if (!intersectionObserver)\n intersectionObserver = new IntersectionObserver(ioDispatchCallback, {\n root: document,\n rootMargin: '0px',\n });\n return intersectionObserver;\n};\n\nexport interface ObservableMediaElement extends HTMLMediaElement {\n handleResize: (entry: ResizeObserverEntry) => void;\n handleVisibilityChanged: (entry: IntersectionObserverEntry) => void;\n}\n\nexport function getClientInfo(): ClientInfo {\n const info = ClientInfo.fromPartial({\n sdk: ClientInfo_SDK.JS,\n protocol: protocolVersion,\n version,\n });\n return info;\n}\n\nlet emptyVideoStreamTrack: MediaStreamTrack | undefined;\n\nexport function getEmptyVideoStreamTrack() {\n if (!emptyVideoStreamTrack) {\n const canvas = document.createElement('canvas');\n canvas.width = 2;\n canvas.height = 2;\n canvas.getContext('2d')?.fillRect(0, 0, canvas.width, canvas.height);\n // @ts-ignore\n const emptyStream = canvas.captureStream();\n [emptyVideoStreamTrack] = emptyStream.getTracks();\n if (!emptyVideoStreamTrack) {\n throw Error('Could not get empty media stream video track');\n }\n emptyVideoStreamTrack.enabled = false;\n }\n return emptyVideoStreamTrack;\n}\n\nlet emptyAudioStreamTrack: MediaStreamTrack | undefined;\n\nexport function getEmptyAudioStreamTrack() {\n if (!emptyAudioStreamTrack) {\n // implementation adapted from https://blog.mozilla.org/webrtc/warm-up-with-replacetrack/\n const ctx = new AudioContext();\n const oscillator = ctx.createOscillator();\n const dst = ctx.createMediaStreamDestination();\n oscillator.connect(dst);\n oscillator.start();\n [emptyAudioStreamTrack] = dst.stream.getAudioTracks();\n if (!emptyAudioStreamTrack) {\n throw Error('Could not get empty media stream audio track');\n }\n emptyAudioStreamTrack.enabled = false;\n }\n return emptyAudioStreamTrack;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\nimport type TypedEventEmitter from 'typed-emitter';\nimport { TrackSource, TrackType } from '../../proto/livekit_models';\nimport { StreamState as ProtoStreamState } from '../../proto/livekit_rtc';\nimport { TrackEvent } from '../events';\nimport { isFireFox, isSafari, isWeb } from '../utils';\n\n// keep old audio elements when detached, we would re-use them since on iOS\n// Safari tracks which audio elements have been \"blessed\" by the user.\nconst recycledElements: Array<HTMLAudioElement> = [];\n\nexport class Track extends (EventEmitter as new () => TypedEventEmitter<TrackEventCallbacks>) {\n kind: Track.Kind;\n\n mediaStream?: MediaStream;\n\n mediaStreamTrack: MediaStreamTrack;\n\n attachedElements: HTMLMediaElement[] = [];\n\n isMuted: boolean = false;\n\n source: Track.Source;\n\n protected isInBackground: boolean;\n\n /**\n * sid is set after track is published to server, or if it's a remote track\n */\n sid?: Track.SID;\n\n protected _currentBitrate: number = 0;\n\n protected constructor(mediaTrack: MediaStreamTrack, kind: Track.Kind) {\n super();\n this.kind = kind;\n this.mediaStreamTrack = mediaTrack;\n this.source = Track.Source.Unknown;\n if (isWeb()) {\n this.isInBackground = document.visibilityState === 'hidden';\n document.addEventListener('visibilitychange', this.appVisibilityChangedListener);\n } else {\n this.isInBackground = false;\n }\n }\n\n /** current receive bits per second */\n get currentBitrate(): number {\n return this._currentBitrate;\n }\n\n /**\n * creates a new HTMLAudioElement or HTMLVideoElement, attaches to it, and returns it\n */\n attach(): HTMLMediaElement;\n\n /**\n * attaches track to an existing HTMLAudioElement or HTMLVideoElement\n */\n attach(element: HTMLMediaElement): HTMLMediaElement;\n attach(element?: HTMLMediaElement): HTMLMediaElement {\n let elementType = 'audio';\n if (this.kind === Track.Kind.Video) {\n elementType = 'video';\n }\n if (!element) {\n if (elementType === 'audio') {\n recycledElements.forEach((e) => {\n if (e.parentElement === null && !element) {\n element = e;\n }\n });\n if (element) {\n // remove it from pool\n recycledElements.splice(recycledElements.indexOf(element), 1);\n }\n }\n if (!element) {\n element = <HTMLMediaElement>document.createElement(elementType);\n }\n }\n\n if (!this.attachedElements.includes(element)) {\n this.attachedElements.push(element);\n }\n\n // even if we believe it's already attached to the element, it's possible\n // the element's srcObject was set to something else out of band.\n // we'll want to re-attach it in that case\n attachToElement(this.mediaStreamTrack, element);\n\n if (element instanceof HTMLAudioElement) {\n // manually play audio to detect audio playback status\n element\n .play()\n .then(() => {\n this.emit(TrackEvent.AudioPlaybackStarted);\n })\n .catch((e) => {\n this.emit(TrackEvent.AudioPlaybackFailed, e);\n });\n }\n\n this.emit(TrackEvent.ElementAttached, element);\n return element;\n }\n\n /**\n * Detaches from all attached elements\n */\n detach(): HTMLMediaElement[];\n\n /**\n * Detach from a single element\n * @param element\n */\n detach(element: HTMLMediaElement): HTMLMediaElement;\n detach(element?: HTMLMediaElement): HTMLMediaElement | HTMLMediaElement[] {\n // detach from a single element\n if (element) {\n detachTrack(this.mediaStreamTrack, element);\n const idx = this.attachedElements.indexOf(element);\n if (idx >= 0) {\n this.attachedElements.splice(idx, 1);\n this.recycleElement(element);\n this.emit(TrackEvent.ElementDetached, element);\n }\n return element;\n }\n\n const detached: HTMLMediaElement[] = [];\n this.attachedElements.forEach((elm) => {\n detachTrack(this.mediaStreamTrack, elm);\n detached.push(elm);\n this.recycleElement(elm);\n this.emit(TrackEvent.ElementDetached, elm);\n });\n\n // remove all tracks\n this.attachedElements = [];\n return detached;\n }\n\n stop() {\n this.mediaStreamTrack.stop();\n if (isWeb()) {\n document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);\n }\n }\n\n protected enable() {\n this.mediaStreamTrack.enabled = true;\n }\n\n protected disable() {\n this.mediaStreamTrack.enabled = false;\n }\n\n private recycleElement(element: HTMLMediaElement) {\n if (element instanceof HTMLAudioElement) {\n // we only need to re-use a single element\n let shouldCache = true;\n element.pause();\n recycledElements.forEach((e) => {\n if (!e.parentElement) {\n shouldCache = false;\n }\n });\n if (shouldCache) {\n recycledElements.push(element);\n }\n }\n }\n\n appVisibilityChangedListener = () => {\n this.handleAppVisibilityChanged();\n };\n\n protected async handleAppVisibilityChanged() {\n this.isInBackground = document.visibilityState === 'hidden';\n }\n}\n\n/** @internal */\nexport function attachToElement(track: MediaStreamTrack, element: HTMLMediaElement) {\n let mediaStream: MediaStream;\n if (element.srcObject instanceof MediaStream) {\n mediaStream = element.srcObject;\n } else {\n mediaStream = new MediaStream();\n }\n\n // check if track matches existing track\n let existingTracks: MediaStreamTrack[];\n if (track.kind === 'audio') {\n existingTracks = mediaStream.getAudioTracks();\n } else {\n existingTracks = mediaStream.getVideoTracks();\n }\n if (!existingTracks.includes(track)) {\n existingTracks.forEach((et) => {\n mediaStream.removeTrack(et);\n });\n mediaStream.addTrack(track);\n }\n\n // avoid flicker\n if (element.srcObject !== mediaStream) {\n element.srcObject = mediaStream;\n if ((isSafari() || isFireFox()) && element instanceof HTMLVideoElement) {\n // Firefox also has a timing issue where video doesn't actually get attached unless\n // performed out-of-band\n // Safari 15 has a bug where in certain layouts, video element renders\n // black until the page is resized or other changes take place.\n // Resetting the src triggers it to render.\n // https://developer.apple.com/forums/thread/690523\n setTimeout(() => {\n element.srcObject = mediaStream;\n // Safari 15 sometimes fails to start a video\n // when the window is backgrounded before the first frame is drawn\n // manually calling play here seems to fix that\n element.play().catch(() => {\n /* do nothing */\n });\n }, 0);\n }\n }\n element.autoplay = true;\n if (element instanceof HTMLVideoElement) {\n element.playsInline = true;\n }\n}\n\n/** @internal */\nexport function detachTrack(track: MediaStreamTrack, element: HTMLMediaElement) {\n if (element.srcObject instanceof MediaStream) {\n const mediaStream = element.srcObject;\n mediaStream.removeTrack(track);\n if (mediaStream.getTracks().length > 0) {\n element.srcObject = mediaStream;\n } else {\n element.srcObject = null;\n }\n }\n}\n\nexport namespace Track {\n export enum Kind {\n Audio = 'audio',\n Video = 'video',\n Unknown = 'unknown',\n }\n export type SID = string;\n export enum Source {\n Camera = 'camera',\n Microphone = 'microphone',\n ScreenShare = 'screen_share',\n ScreenShareAudio = 'screen_share_audio',\n Unknown = 'unknown',\n }\n\n export enum StreamState {\n Active = 'active',\n Paused = 'paused',\n Unknown = 'unknown',\n }\n\n export interface Dimensions {\n width: number;\n height: number;\n }\n\n /** @internal */\n export function kindToProto(k: Kind): TrackType {\n switch (k) {\n case Kind.Audio:\n return TrackType.AUDIO;\n case Kind.Video:\n return TrackType.VIDEO;\n default:\n return TrackType.UNRECOGNIZED;\n }\n }\n\n /** @internal */\n export function kindFromProto(t: TrackType): Kind | undefined {\n switch (t) {\n case TrackType.AUDIO:\n return Kind.Audio;\n case TrackType.VIDEO:\n return Kind.Video;\n default:\n return Kind.Unknown;\n }\n }\n\n /** @internal */\n export function sourceToProto(s: Source): TrackSource {\n switch (s) {\n case Source.Camera:\n return TrackSource.CAMERA;\n case Source.Microphone:\n return TrackSource.MICROPHONE;\n case Source.ScreenShare:\n return TrackSource.SCREEN_SHARE;\n case Source.ScreenShareAudio:\n return TrackSource.SCREEN_SHARE_AUDIO;\n default:\n return TrackSource.UNRECOGNIZED;\n }\n }\n\n /** @internal */\n export function sourceFromProto(s: TrackSource): Source {\n switch (s) {\n case TrackSource.CAMERA:\n return Source.Camera;\n case TrackSource.MICROPHONE:\n return Source.Microphone;\n case TrackSource.SCREEN_SHARE:\n return Source.ScreenShare;\n case TrackSource.SCREEN_SHARE_AUDIO:\n return Source.ScreenShareAudio;\n default:\n return Source.Unknown;\n }\n }\n\n /** @internal */\n export function streamStateFromProto(s: ProtoStreamState): StreamState {\n switch (s) {\n case ProtoStreamState.ACTIVE:\n return StreamState.Active;\n case ProtoStreamState.PAUSED:\n return StreamState.Paused;\n default:\n return StreamState.Unknown;\n }\n }\n}\n\nexport type TrackEventCallbacks = {\n message: () => void;\n muted: (track?: any) => void;\n unmuted: (track?: any) => void;\n ended: (track?: any) => void;\n updateSettings: () => void;\n updateSubscription: () => void;\n audioPlaybackStarted: () => void;\n audioPlaybackFailed: (error: Error) => void;\n audioSilenceDetected: () => void;\n visibilityChanged: (visible: boolean, track?: any) => void;\n videoDimensionsChanged: (dimensions: Track.Dimensions, track?: any) => void;\n elementAttached: (element: HTMLMediaElement) => void;\n elementDetached: (element: HTMLMediaElement) => void;\n upstreamPaused: (track: any) => void;\n upstreamResumed: (track: any) => void;\n};\n","import log from '../../logger';\nimport DeviceManager from '../DeviceManager';\nimport { TrackInvalidError } from '../errors';\nimport { TrackEvent } from '../events';\nimport { getEmptyAudioStreamTrack, getEmptyVideoStreamTrack, isMobile } from '../utils';\nimport { attachToElement, detachTrack, Track } from './Track';\n\nexport default class LocalTrack extends Track {\n /** @internal */\n sender?: RTCRtpSender;\n\n protected constraints: MediaTrackConstraints;\n\n protected wasMuted: boolean;\n\n protected reacquireTrack: boolean;\n\n protected constructor(\n mediaTrack: MediaStreamTrack,\n kind: Track.Kind,\n constraints?: MediaTrackConstraints,\n ) {\n super(mediaTrack, kind);\n this.mediaStreamTrack.addEventListener('ended', this.handleEnded);\n this.constraints = constraints ?? mediaTrack.getConstraints();\n this.reacquireTrack = false;\n this.wasMuted = false;\n }\n\n get id(): string {\n return this.mediaStreamTrack.id;\n }\n\n get dimensions(): Track.Dimensions | undefined {\n if (this.kind !== Track.Kind.Video) {\n return undefined;\n }\n\n const { width, height } = this.mediaStreamTrack.getSettings();\n if (width && height) {\n return {\n width,\n height,\n };\n }\n return undefined;\n }\n\n private _isUpstreamPaused: boolean = false;\n\n get isUpstreamPaused() {\n return this._isUpstreamPaused;\n }\n\n /**\n * @returns DeviceID of the device that is currently being used for this track\n */\n async getDeviceId(): Promise<string | undefined> {\n // screen share doesn't have a usable device id\n if (this.source === Track.Source.ScreenShare) {\n return;\n }\n const { deviceId, groupId } = this.mediaStreamTrack.getSettings();\n const kind = this.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';\n\n return DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId);\n }\n\n async mute(): Promise<LocalTrack> {\n this.setTrackMuted(true);\n return this;\n }\n\n async unmute(): Promise<LocalTrack> {\n this.setTrackMuted(false);\n return this;\n }\n\n async replaceTrack(track: MediaStreamTrack): Promise<LocalTrack> {\n if (!this.sender) {\n throw new TrackInvalidError('unable to replace an unpublished track');\n }\n\n // detach\n this.attachedElements.forEach((el) => {\n detachTrack(this.mediaStreamTrack, el);\n });\n this.mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n // on Safari, the old audio track must be stopped before attempting to acquire\n // the new track, otherwise the new track will stop with\n // 'A MediaStreamTrack ended due to a capture failure`\n this.mediaStreamTrack.stop();\n\n track.addEventListener('ended', this.handleEnded);\n log.debug('replace MediaStreamTrack');\n\n await this.sender.replaceTrack(track);\n this.mediaStreamTrack = track;\n\n this.attachedElements.forEach((el) => {\n attachToElement(track, el);\n });\n\n this.mediaStream = new MediaStream([track]);\n return this;\n }\n\n protected async restart(constraints?: MediaTrackConstraints): Promise<LocalTrack> {\n if (!this.sender) {\n throw new TrackInvalidError('unable to restart an unpublished track');\n }\n if (!constraints) {\n constraints = this.constraints;\n }\n log.debug('restarting track with constraints', constraints);\n\n const streamConstraints: MediaStreamConstraints = {\n audio: false,\n video: false,\n };\n\n if (this.kind === Track.Kind.Video) {\n streamConstraints.video = constraints;\n } else {\n streamConstraints.audio = constraints;\n }\n\n // detach\n this.attachedElements.forEach((el) => {\n detachTrack(this.mediaStreamTrack, el);\n });\n this.mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n // on Safari, the old audio track must be stopped before attempting to acquire\n // the new track, otherwise the new track will stop with\n // 'A MediaStreamTrack ended due to a capture failure`\n this.mediaStreamTrack.stop();\n\n // create new track and attach\n const mediaStream = await navigator.mediaDevices.getUserMedia(streamConstraints);\n const newTrack = mediaStream.getTracks()[0];\n newTrack.addEventListener('ended', this.handleEnded);\n log.debug('re-acquired MediaStreamTrack');\n\n await this.sender.replaceTrack(newTrack);\n this.mediaStreamTrack = newTrack;\n\n this.attachedElements.forEach((el) => {\n attachToElement(newTrack, el);\n });\n\n this.mediaStream = mediaStream;\n this.constraints = constraints;\n return this;\n }\n\n protected setTrackMuted(muted: boolean) {\n if (this.isMuted === muted) {\n return;\n }\n\n this.isMuted = muted;\n this.mediaStreamTrack.enabled = !muted;\n this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n }\n\n protected get needsReAcquisition(): boolean {\n return (\n this.mediaStreamTrack.readyState !== 'live' ||\n this.mediaStreamTrack.muted ||\n !this.mediaStreamTrack.enabled ||\n this.reacquireTrack\n );\n }\n\n protected async handleAppVisibilityChanged() {\n await super.handleAppVisibilityChanged();\n if (!isMobile()) return;\n log.debug(`visibility changed, is in Background: ${this.isInBackground}`);\n\n if (!this.isInBackground && this.needsReAcquisition) {\n log.debug(`track needs to be reaquired, restarting ${this.source}`);\n await this.restart();\n this.reacquireTrack = false;\n // Restore muted state if had to be restarted\n this.setTrackMuted(this.wasMuted);\n }\n\n // store muted state each time app goes to background\n if (this.isInBackground) {\n this.wasMuted = this.isMuted;\n }\n }\n\n private handleEnded = () => {\n if (this.isInBackground) {\n this.reacquireTrack = true;\n }\n this.emit(TrackEvent.Ended, this);\n };\n\n async pauseUpstream() {\n if (this._isUpstreamPaused === true) {\n return;\n }\n if (!this.sender) {\n log.warn('unable to pause upstream for an unpublished track');\n return;\n }\n this._isUpstreamPaused = true;\n this.emit(TrackEvent.UpstreamPaused, this);\n const emptyTrack =\n this.kind === Track.Kind.Audio ? getEmptyAudioStreamTrack() : getEmptyVideoStreamTrack();\n await this.sender.replaceTrack(emptyTrack);\n }\n\n async resumeUpstream() {\n if (this._isUpstreamPaused === false) {\n return;\n }\n if (!this.sender) {\n log.warn('unable to resume upstream for an unpublished track');\n return;\n }\n this._isUpstreamPaused = false;\n this.emit(TrackEvent.UpstreamResumed, this);\n\n await this.sender.replaceTrack(this.mediaStreamTrack);\n }\n}\n","import { sleep } from '../utils';\nimport { AudioCaptureOptions, CreateLocalTracksOptions, VideoCaptureOptions } from './options';\nimport { AudioTrack } from './types';\n\nexport function mergeDefaultOptions(\n options?: CreateLocalTracksOptions,\n audioDefaults?: AudioCaptureOptions,\n videoDefaults?: VideoCaptureOptions,\n): CreateLocalTracksOptions {\n const opts: CreateLocalTracksOptions = {\n ...options,\n };\n if (opts.audio === true) opts.audio = {};\n if (opts.video === true) opts.video = {};\n\n // use defaults\n if (opts.audio) {\n mergeObjectWithoutOverwriting(\n opts.audio as Record<string, unknown>,\n audioDefaults as Record<string, unknown>,\n );\n }\n if (opts.video) {\n mergeObjectWithoutOverwriting(\n opts.video as Record<string, unknown>,\n videoDefaults as Record<string, unknown>,\n );\n }\n return opts;\n}\n\nfunction mergeObjectWithoutOverwriting(\n mainObject: Record<string, unknown>,\n objectToMerge: Record<string, unknown>,\n): Record<string, unknown> {\n Object.keys(objectToMerge).forEach((key) => {\n if (mainObject[key] === undefined) mainObject[key] = objectToMerge[key];\n });\n return mainObject;\n}\n\nexport function constraintsForOptions(options: CreateLocalTracksOptions): MediaStreamConstraints {\n const constraints: MediaStreamConstraints = {};\n\n if (options.video) {\n // default video options\n if (typeof options.video === 'object') {\n const videoOptions: MediaTrackConstraints = {};\n const target = videoOptions as Record<string, unknown>;\n const source = options.video as Record<string, unknown>;\n Object.keys(source).forEach((key) => {\n switch (key) {\n case 'resolution':\n // flatten VideoResolution fields\n mergeObjectWithoutOverwriting(target, source.resolution as Record<string, unknown>);\n break;\n default:\n target[key] = source[key];\n }\n });\n constraints.video = videoOptions;\n } else {\n constraints.video = options.video;\n }\n } else {\n constraints.video = false;\n }\n\n if (options.audio) {\n if (typeof options.audio === 'object') {\n constraints.audio = options.audio;\n } else {\n constraints.audio = true;\n }\n } else {\n constraints.audio = false;\n }\n return constraints;\n}\n/**\n * This function detects silence on a given [[Track]] instance.\n * Returns true if the track seems to be entirely silent.\n */\nexport async function detectSilence(track: AudioTrack, timeOffset = 200): Promise<boolean> {\n const ctx = getNewAudioContext();\n if (ctx) {\n const analyser = ctx.createAnalyser();\n analyser.fftSize = 2048;\n\n const bufferLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(bufferLength);\n const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));\n\n source.connect(analyser);\n await sleep(timeOffset);\n analyser.getByteTimeDomainData(dataArray);\n const someNoise = dataArray.some((sample) => sample !== 128 && sample !== 0);\n ctx.close();\n return !someNoise;\n }\n return false;\n}\n\n/**\n * @internal\n */\nexport function getNewAudioContext(): AudioContext | void {\n // @ts-ignore\n const AudioContext = window.AudioContext || window.webkitAudioContext;\n if (AudioContext) {\n return new AudioContext();\n }\n}\n","import log from '../../logger';\nimport { TrackEvent } from '../events';\nimport { AudioSenderStats, computeBitrate, monitorFrequency } from '../stats';\nimport LocalTrack from './LocalTrack';\nimport { AudioCaptureOptions } from './options';\nimport { Track } from './Track';\nimport { constraintsForOptions, detectSilence } from './utils';\n\nexport default class LocalAudioTrack extends LocalTrack {\n sender?: RTCRtpSender;\n\n /** @internal */\n stopOnMute: boolean = false;\n\n private prevStats?: AudioSenderStats;\n\n constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints) {\n super(mediaTrack, Track.Kind.Audio, constraints);\n this.checkForSilence();\n }\n\n async setDeviceId(deviceId: string) {\n if (this.constraints.deviceId === deviceId) {\n return;\n }\n this.constraints.deviceId = deviceId;\n if (!this.isMuted) {\n await this.restartTrack();\n }\n }\n\n async mute(): Promise<LocalAudioTrack> {\n // disabled special handling as it will cause BT headsets to switch communication modes\n if (this.source === Track.Source.Microphone && this.stopOnMute) {\n log.debug('stopping mic track');\n // also stop the track, so that microphone indicator is turned off\n this.mediaStreamTrack.stop();\n }\n await super.mute();\n return this;\n }\n\n async unmute(): Promise<LocalAudioTrack> {\n if (this.source === Track.Source.Microphone && this.stopOnMute) {\n log.debug('reacquiring mic track');\n await this.restartTrack();\n }\n await super.unmute();\n return this;\n }\n\n async restartTrack(options?: AudioCaptureOptions) {\n let constraints: MediaTrackConstraints | undefined;\n if (options) {\n const streamConstraints = constraintsForOptions({ audio: options });\n if (typeof streamConstraints.audio !== 'boolean') {\n constraints = streamConstraints.audio;\n }\n }\n await this.restart(constraints);\n }\n\n protected async restart(constraints?: MediaTrackConstraints): Promise<LocalTrack> {\n const track = await super.restart(constraints);\n this.checkForSilence();\n return track;\n }\n\n /* @internal */\n startMonitor() {\n setTimeout(() => {\n this.monitorSender();\n }, monitorFrequency);\n }\n\n private monitorSender = async () => {\n if (!this.sender) {\n this._currentBitrate = 0;\n return;\n }\n\n let stats: AudioSenderStats | undefined;\n try {\n stats = await this.getSenderStats();\n } catch (e) {\n log.error('could not get audio sender stats', e);\n return;\n }\n\n if (stats && this.prevStats) {\n this._currentBitrate = computeBitrate(stats, this.prevStats);\n }\n\n this.prevStats = stats;\n setTimeout(() => {\n this.monitorSender();\n }, monitorFrequency);\n };\n\n async getSenderStats(): Promise<AudioSenderStats | undefined> {\n if (!this.sender) {\n return undefined;\n }\n\n const stats = await this.sender.getStats();\n let audioStats: AudioSenderStats | undefined;\n stats.forEach((v) => {\n if (v.type === 'outbound-rtp') {\n audioStats = {\n type: 'audio',\n streamId: v.id,\n packetsSent: v.packetsSent,\n packetsLost: v.packetsLost,\n bytesSent: v.bytesSent,\n timestamp: v.timestamp,\n roundTripTime: v.roundTripTime,\n jitter: v.jitter,\n };\n }\n });\n\n return audioStats;\n }\n\n async checkForSilence() {\n const trackIsSilent = await detectSilence(this);\n if (trackIsSilent) {\n if (!this.isMuted) {\n log.warn('silence detected on local audio track');\n }\n this.emit(TrackEvent.AudioSilenceDetected);\n }\n }\n}\n","import { SignalClient } from '../../api/SignalClient';\nimport log from '../../logger';\nimport { VideoLayer, VideoQuality } from '../../proto/livekit_models';\nimport { SubscribedQuality } from '../../proto/livekit_rtc';\nimport { computeBitrate, monitorFrequency, VideoSenderStats } from '../stats';\nimport { isFireFox, isMobile } from '../utils';\nimport LocalTrack from './LocalTrack';\nimport { VideoCaptureOptions } from './options';\nimport { Track } from './Track';\nimport { constraintsForOptions } from './utils';\n\nexport default class LocalVideoTrack extends LocalTrack {\n /* internal */\n signalClient?: SignalClient;\n\n private prevStats?: Map<string, VideoSenderStats>;\n\n private encodings?: RTCRtpEncodingParameters[];\n\n constructor(mediaTrack: MediaStreamTrack, constraints?: MediaTrackConstraints) {\n super(mediaTrack, Track.Kind.Video, constraints);\n }\n\n get isSimulcast(): boolean {\n if (this.sender && this.sender.getParameters().encodings.length > 1) {\n return true;\n }\n return false;\n }\n\n /* @internal */\n startMonitor(signalClient: SignalClient) {\n this.signalClient = signalClient;\n // save original encodings\n const params = this.sender?.getParameters();\n if (params) {\n this.encodings = params.encodings;\n }\n\n setTimeout(() => {\n this.monitorSender();\n }, monitorFrequency);\n }\n\n stop() {\n this.sender = undefined;\n this.mediaStreamTrack.getConstraints();\n super.stop();\n }\n\n async mute(): Promise<LocalVideoTrack> {\n if (this.source === Track.Source.Camera) {\n log.debug('stopping camera track');\n // also stop the track, so that camera indicator is turned off\n this.mediaStreamTrack.stop();\n }\n await super.mute();\n return this;\n }\n\n async unmute(): Promise<LocalVideoTrack> {\n if (this.source === Track.Source.Camera) {\n log.debug('reacquiring camera track');\n await this.restartTrack();\n }\n await super.unmute();\n return this;\n }\n\n async getSenderStats(): Promise<VideoSenderStats[]> {\n if (!this.sender) {\n return [];\n }\n\n const items: VideoSenderStats[] = [];\n\n const stats = await this.sender.getStats();\n stats.forEach((v) => {\n if (v.type === 'outbound-rtp') {\n const vs: VideoSenderStats = {\n type: 'video',\n streamId: v.id,\n frameHeight: v.frameHeight,\n frameWidth: v.frameWidth,\n firCount: v.firCount,\n pliCount: v.pliCount,\n nackCount: v.nackCount,\n packetsSent: v.packetsSent,\n bytesSent: v.bytesSent,\n framesSent: v.framesSent,\n timestamp: v.timestamp,\n rid: v.rid ?? '',\n retransmittedPacketsSent: v.retransmittedPacketsSent,\n qualityLimitationReason: v.qualityLimitationReason,\n qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges,\n };\n\n // locate the appropriate remote-inbound-rtp item\n const r = stats.get(v.remoteId);\n if (r) {\n vs.jitter = r.jitter;\n vs.packetsLost = r.packetsLost;\n vs.roundTripTime = r.roundTripTime;\n }\n\n items.push(vs);\n }\n });\n\n return items;\n }\n\n setPublishingQuality(maxQuality: VideoQuality) {\n const qualities: SubscribedQuality[] = [];\n for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) {\n qualities.push({\n quality: q,\n enabled: q <= maxQuality,\n });\n }\n log.debug(`setting publishing quality. max quality ${maxQuality}`);\n this.setPublishingLayers(qualities);\n }\n\n async setDeviceId(deviceId: string) {\n if (this.constraints.deviceId === deviceId) {\n return;\n }\n this.constraints.deviceId = deviceId;\n // when video is muted, underlying media stream track is stopped and\n // will be restarted later\n if (!this.isMuted) {\n await this.restartTrack();\n }\n }\n\n async restartTrack(options?: VideoCaptureOptions) {\n let constraints: MediaTrackConstraints | undefined;\n if (options) {\n const streamConstraints = constraintsForOptions({ video: options });\n if (typeof streamConstraints.video !== 'boolean') {\n constraints = streamConstraints.video;\n }\n }\n await this.restart(constraints);\n }\n\n /**\n * @internal\n * Sets layers that should be publishing\n */\n async setPublishingLayers(qualities: SubscribedQuality[]) {\n log.debug('setting publishing layers', qualities);\n if (!this.sender || !this.encodings) {\n return;\n }\n const params = this.sender.getParameters();\n const { encodings } = params;\n if (!encodings) {\n return;\n }\n\n if (encodings.length !== this.encodings.length) {\n log.warn('cannot set publishing layers, encodings mismatch');\n return;\n }\n\n let hasChanged = false;\n encodings.forEach((encoding, idx) => {\n let rid = encoding.rid ?? '';\n if (rid === '') {\n rid = 'q';\n }\n const quality = videoQualityForRid(rid);\n const subscribedQuality = qualities.find((q) => q.quality === quality);\n if (!subscribedQuality) {\n return;\n }\n if (encoding.active !== subscribedQuality.enabled) {\n hasChanged = true;\n encoding.active = subscribedQuality.enabled;\n log.debug(\n `setting layer ${subscribedQuality.quality} to ${\n encoding.active ? 'enabled' : 'disabled'\n }`,\n );\n\n // FireFox does not support setting encoding.active to false, so we\n // have a workaround of lowering its bitrate and resolution to the min.\n if (isFireFox()) {\n if (subscribedQuality.enabled) {\n encoding.scaleResolutionDownBy = this.encodings![idx].scaleResolutionDownBy;\n encoding.maxBitrate = this.encodings![idx].maxBitrate;\n /* @ts-ignore */\n encoding.maxFrameRate = this.encodings![idx].maxFrameRate;\n } else {\n encoding.scaleResolutionDownBy = 4;\n encoding.maxBitrate = 10;\n /* @ts-ignore */\n encoding.maxFrameRate = 2;\n }\n }\n }\n });\n\n if (hasChanged) {\n params.encodings = encodings;\n await this.sender.setParameters(params);\n }\n }\n\n private monitorSender = async () => {\n if (!this.sender) {\n this._currentBitrate = 0;\n return;\n }\n\n let stats: VideoSenderStats[] | undefined;\n try {\n stats = await this.getSenderStats();\n } catch (e) {\n log.error('could not get audio sender stats', { error: e });\n return;\n }\n const statsMap = new Map<string, VideoSenderStats>(stats.map((s) => [s.rid, s]));\n\n if (this.prevStats) {\n let totalBitrate = 0;\n statsMap.forEach((s, key) => {\n const prev = this.prevStats?.get(key);\n totalBitrate += computeBitrate(s, prev);\n });\n this._currentBitrate = totalBitrate;\n }\n\n this.prevStats = statsMap;\n setTimeout(() => {\n this.monitorSender();\n }, monitorFrequency);\n };\n\n protected async handleAppVisibilityChanged() {\n await super.handleAppVisibilityChanged();\n if (!isMobile()) return;\n if (this.isInBackground && this.source === Track.Source.Camera) {\n this.mediaStreamTrack.enabled = false;\n }\n }\n}\n\nexport function videoQualityForRid(rid: string): VideoQuality {\n switch (rid) {\n case 'f':\n return VideoQuality.HIGH;\n case 'h':\n return VideoQuality.MEDIUM;\n case 'q':\n return VideoQuality.LOW;\n default:\n return VideoQuality.UNRECOGNIZED;\n }\n}\n\nexport function videoLayersFromEncodings(\n width: number,\n height: number,\n encodings?: RTCRtpEncodingParameters[],\n): VideoLayer[] {\n // default to a single layer, HQ\n if (!encodings) {\n return [\n {\n quality: VideoQuality.HIGH,\n width,\n height,\n bitrate: 0,\n ssrc: 0,\n },\n ];\n }\n return encodings.map((encoding) => {\n const scale = encoding.scaleResolutionDownBy ?? 1;\n let quality = videoQualityForRid(encoding.rid ?? '');\n if (quality === VideoQuality.UNRECOGNIZED && encodings.length === 1) {\n quality = VideoQuality.HIGH;\n }\n return {\n quality,\n width: width / scale,\n height: height / scale,\n bitrate: encoding.maxBitrate ?? 0,\n ssrc: 0,\n };\n });\n}\n","import { TrackEvent } from '../events';\nimport { monitorFrequency } from '../stats';\nimport { Track } from './Track';\n\nexport default abstract class RemoteTrack extends Track {\n /** @internal */\n receiver?: RTCRtpReceiver;\n\n streamState: Track.StreamState = Track.StreamState.Active;\n\n constructor(\n mediaTrack: MediaStreamTrack,\n sid: string,\n kind: Track.Kind,\n receiver?: RTCRtpReceiver,\n ) {\n super(mediaTrack, kind);\n this.sid = sid;\n this.receiver = receiver;\n }\n\n /** @internal */\n setMuted(muted: boolean) {\n if (this.isMuted !== muted) {\n this.isMuted = muted;\n this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n }\n }\n\n /** @internal */\n setMediaStream(stream: MediaStream) {\n // this is needed to determine when the track is finished\n // we send each track down in its own MediaStream, so we can assume the\n // current track is the only one that can be removed.\n this.mediaStream = stream;\n stream.onremovetrack = () => {\n this.receiver = undefined;\n this._currentBitrate = 0;\n this.emit(TrackEvent.Ended, this);\n };\n }\n\n start() {\n this.startMonitor();\n // use `enabled` of track to enable re-use of transceiver\n super.enable();\n }\n\n stop() {\n // use `enabled` of track to enable re-use of transceiver\n super.disable();\n }\n\n /* @internal */\n startMonitor() {\n setTimeout(() => {\n this.monitorReceiver();\n }, monitorFrequency);\n }\n\n protected abstract monitorReceiver(): void;\n}\n","import { AudioReceiverStats, computeBitrate, monitorFrequency } from '../stats';\nimport RemoteTrack from './RemoteTrack';\nimport { Track } from './Track';\n\nexport default class RemoteAudioTrack extends RemoteTrack {\n private prevStats?: AudioReceiverStats;\n\n private elementVolume: number;\n\n constructor(mediaTrack: MediaStreamTrack, sid: string, receiver?: RTCRtpReceiver) {\n super(mediaTrack, sid, Track.Kind.Audio, receiver);\n this.elementVolume = 1;\n }\n\n /**\n * sets the volume for all attached audio elements\n */\n setVolume(volume: number) {\n for (const el of this.attachedElements) {\n el.volume = volume;\n }\n this.elementVolume = volume;\n }\n\n /**\n * gets the volume for all attached audio elements\n */\n getVolume(): number {\n return this.elementVolume;\n }\n\n attach(): HTMLMediaElement;\n attach(element: HTMLMediaElement): HTMLMediaElement;\n attach(element?: HTMLMediaElement): HTMLMediaElement {\n if (!element) {\n element = super.attach();\n } else {\n super.attach(element);\n }\n element.volume = this.elementVolume;\n return element;\n }\n\n protected monitorReceiver = async () => {\n if (!this.receiver) {\n this._currentBitrate = 0;\n return;\n }\n const stats = await this.getReceiverStats();\n\n if (stats && this.prevStats && this.receiver) {\n this._currentBitrate = computeBitrate(stats, this.prevStats);\n }\n\n this.prevStats = stats;\n setTimeout(() => {\n this.monitorReceiver();\n }, monitorFrequency);\n };\n\n protected async getReceiverStats(): Promise<AudioReceiverStats | undefined> {\n if (!this.receiver) {\n return;\n }\n\n const stats = await this.receiver.getStats();\n let receiverStats: AudioReceiverStats | undefined;\n stats.forEach((v) => {\n if (v.type === 'inbound-rtp') {\n receiverStats = {\n type: 'audio',\n timestamp: v.timestamp,\n jitter: v.jitter,\n bytesReceived: v.bytesReceived,\n concealedSamples: v.concealedSamples,\n concealmentEvents: v.concealmentEvents,\n silentConcealedSamples: v.silentConcealedSamples,\n silentConcealmentEvents: v.silentConcealmentEvents,\n totalAudioEnergy: v.totalAudioEnergy,\n totalSamplesDuration: v.totalSamplesDuration,\n };\n }\n });\n return receiverStats;\n }\n}\n","function r(r,e,n){var i,t,o;void 0===e&&(e=50),void 0===n&&(n={});var a=null!=(i=n.isImmediate)&&i,u=null!=(t=n.callback)&&t,c=n.maxWait,v=Date.now(),l=[];function f(){if(void 0!==c){var r=Date.now()-v;if(r+e>=c)return c-r}return e}var d=function(){var e=[].slice.call(arguments),n=this;return new Promise(function(i,t){var c=a&&void 0===o;if(void 0!==o&&clearTimeout(o),o=setTimeout(function(){if(o=void 0,v=Date.now(),!a){var i=r.apply(n,e);u&&u(i),l.forEach(function(r){return(0,r.resolve)(i)}),l=[]}},f()),c){var d=r.apply(n,e);return u&&u(d),i(d)}l.push({resolve:i,reject:t})})};return d.cancel=function(r){void 0!==o&&clearTimeout(o),l.forEach(function(e){return(0,e.reject)(r)}),l=[]},d}export{r as debounce};\n//# sourceMappingURL=index.esm.js.map\n","import { debounce } from 'ts-debounce';\nimport { TrackEvent } from '../events';\nimport { computeBitrate, monitorFrequency, VideoReceiverStats } from '../stats';\nimport {\n getIntersectionObserver,\n getResizeObserver,\n isMobile,\n ObservableMediaElement,\n} from '../utils';\nimport RemoteTrack from './RemoteTrack';\nimport { attachToElement, detachTrack, Track } from './Track';\nimport { AdaptiveStreamSettings } from './types';\n\nconst REACTION_DELAY = 100;\n\nexport default class RemoteVideoTrack extends RemoteTrack {\n /** @internal */\n receiver?: RTCRtpReceiver;\n\n private prevStats?: VideoReceiverStats;\n\n private elementInfos: ElementInfo[] = [];\n\n private adaptiveStreamSettings?: AdaptiveStreamSettings;\n\n private lastVisible?: boolean;\n\n private lastDimensions?: Track.Dimensions;\n\n constructor(\n mediaTrack: MediaStreamTrack,\n sid: string,\n receiver?: RTCRtpReceiver,\n adaptiveStreamSettings?: AdaptiveStreamSettings,\n ) {\n super(mediaTrack, sid, Track.Kind.Video, receiver);\n this.adaptiveStreamSettings = adaptiveStreamSettings;\n if (this.isAdaptiveStream) {\n this.streamState = Track.StreamState.Paused;\n }\n }\n\n get isAdaptiveStream(): boolean {\n return this.adaptiveStreamSettings !== undefined;\n }\n\n /** @internal */\n setMuted(muted: boolean) {\n super.setMuted(muted);\n\n this.attachedElements.forEach((element) => {\n // detach or attach\n if (muted) {\n detachTrack(this.mediaStreamTrack, element);\n } else {\n attachToElement(this.mediaStreamTrack, element);\n }\n });\n }\n\n attach(): HTMLMediaElement;\n attach(element: HTMLMediaElement): HTMLMediaElement;\n attach(element?: HTMLMediaElement): HTMLMediaElement {\n if (!element) {\n element = super.attach();\n } else {\n super.attach(element);\n }\n\n // It's possible attach is called multiple times on an element. When that's\n // the case, we'd want to avoid adding duplicate elementInfos\n if (\n this.adaptiveStreamSettings &&\n this.elementInfos.find((info) => info.element === element) === undefined\n ) {\n this.elementInfos.push({\n element,\n visible: true, // default visible\n });\n\n (element as ObservableMediaElement).handleResize = this.debouncedHandleResize;\n (element as ObservableMediaElement).handleVisibilityChanged = this.handleVisibilityChanged;\n\n getIntersectionObserver().observe(element);\n getResizeObserver().observe(element);\n\n // trigger the first resize update cycle\n // if the tab is backgrounded, the initial resize event does not fire until\n // the tab comes into focus for the first time.\n this.debouncedHandleResize();\n }\n return element;\n }\n\n detach(): HTMLMediaElement[];\n detach(element: HTMLMediaElement): HTMLMediaElement;\n detach(element?: HTMLMediaElement): HTMLMediaElement | HTMLMediaElement[] {\n let detachedElements: HTMLMediaElement[] = [];\n if (element) {\n this.stopObservingElement(element);\n return super.detach(element);\n }\n detachedElements = super.detach();\n\n for (const e of detachedElements) {\n this.stopObservingElement(e);\n }\n\n return detachedElements;\n }\n\n protected monitorReceiver = async () => {\n if (!this.receiver) {\n this._currentBitrate = 0;\n return;\n }\n const stats = await this.getReceiverStats();\n\n if (stats && this.prevStats && this.receiver) {\n this._currentBitrate = computeBitrate(stats, this.prevStats);\n }\n\n this.prevStats = stats;\n setTimeout(() => {\n this.monitorReceiver();\n }, monitorFrequency);\n };\n\n private async getReceiverStats(): Promise<VideoReceiverStats | undefined> {\n if (!this.receiver) {\n return;\n }\n\n const stats = await this.receiver.getStats();\n let receiverStats: VideoReceiverStats | undefined;\n stats.forEach((v) => {\n if (v.type === 'inbound-rtp') {\n receiverStats = {\n type: 'video',\n framesDecoded: v.framesDecoded,\n framesDropped: v.framesDropped,\n framesReceived: v.framesReceived,\n packetsReceived: v.packetsReceived,\n packetsLost: v.packetsLost,\n frameWidth: v.frameWidth,\n frameHeight: v.frameHeight,\n pliCount: v.pliCount,\n firCount: v.firCount,\n nackCount: v.nackCount,\n jitter: v.jitter,\n timestamp: v.timestamp,\n bytesReceived: v.bytesReceived,\n };\n }\n });\n return receiverStats;\n }\n\n private stopObservingElement(element: HTMLMediaElement) {\n getIntersectionObserver()?.unobserve(element);\n getResizeObserver()?.unobserve(element);\n this.elementInfos = this.elementInfos.filter((info) => info.element !== element);\n }\n\n private handleVisibilityChanged = (entry: IntersectionObserverEntry) => {\n const { target, isIntersecting } = entry;\n const elementInfo = this.elementInfos.find((info) => info.element === target);\n if (elementInfo) {\n elementInfo.visible = isIntersecting;\n elementInfo.visibilityChangedAt = Date.now();\n }\n this.updateVisibility();\n };\n\n protected async handleAppVisibilityChanged() {\n await super.handleAppVisibilityChanged();\n if (!this.isAdaptiveStream) return;\n // on desktop don't pause when tab is backgrounded\n if (!isMobile()) return;\n this.updateVisibility();\n }\n\n private readonly debouncedHandleResize = debounce(() => {\n this.updateDimensions();\n }, REACTION_DELAY);\n\n private updateVisibility() {\n const lastVisibilityChange = this.elementInfos.reduce(\n (prev, info) => Math.max(prev, info.visibilityChangedAt || 0),\n 0,\n );\n const isVisible = this.elementInfos.some((info) => info.visible) && !this.isInBackground;\n\n if (this.lastVisible === isVisible) {\n return;\n }\n\n if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {\n // delay hidden events\n setTimeout(() => {\n this.updateVisibility();\n }, REACTION_DELAY);\n return;\n }\n\n this.lastVisible = isVisible;\n this.emit(TrackEvent.VisibilityChanged, isVisible, this);\n }\n\n private updateDimensions() {\n let maxWidth = 0;\n let maxHeight = 0;\n for (const info of this.elementInfos) {\n const pixelDensity = this.adaptiveStreamSettings?.pixelDensity ?? 1;\n const pixelDensityValue = pixelDensity === 'screen' ? window.devicePixelRatio : pixelDensity;\n const currentElementWidth = info.element.clientWidth * pixelDensityValue;\n const currentElementHeight = info.element.clientHeight * pixelDensityValue;\n if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {\n maxWidth = currentElementWidth;\n maxHeight = currentElementHeight;\n }\n }\n\n if (this.lastDimensions?.width === maxWidth && this.lastDimensions?.height === maxHeight) {\n return;\n }\n\n this.lastDimensions = {\n width: maxWidth,\n height: maxHeight,\n };\n this.emit(TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);\n }\n}\n\ninterface ElementInfo {\n element: HTMLMediaElement;\n visible: boolean;\n visibilityChangedAt?: number;\n}\n","import { EventEmitter } from 'events';\nimport { TrackInfo } from '../../proto/livekit_models';\nimport { TrackEvent } from '../events';\nimport LocalAudioTrack from './LocalAudioTrack';\nimport LocalVideoTrack from './LocalVideoTrack';\nimport RemoteAudioTrack from './RemoteAudioTrack';\nimport RemoteVideoTrack from './RemoteVideoTrack';\nimport { Track } from './Track';\n\nexport class TrackPublication extends EventEmitter {\n kind: Track.Kind;\n\n trackName: string;\n\n trackSid: Track.SID;\n\n track?: Track;\n\n source: Track.Source;\n\n /** MimeType of the published track */\n mimeType?: string;\n\n /** dimension of the original published stream, video-only */\n dimensions?: Track.Dimensions;\n\n /** true if track was simulcasted to server, video-only */\n simulcasted?: boolean;\n\n /** @internal */\n trackInfo?: TrackInfo;\n\n protected metadataMuted: boolean = false;\n\n constructor(kind: Track.Kind, id: string, name: string) {\n super();\n this.kind = kind;\n this.trackSid = id;\n this.trackName = name;\n this.source = Track.Source.Unknown;\n }\n\n /** @internal */\n setTrack(track?: Track) {\n if (this.track) {\n this.track.off(TrackEvent.Muted, this.handleMuted);\n this.track.off(TrackEvent.Unmuted, this.handleUnmuted);\n }\n\n this.track = track;\n\n if (track) {\n // forward events\n track.on(TrackEvent.Muted, this.handleMuted);\n track.on(TrackEvent.Unmuted, this.handleUnmuted);\n }\n }\n\n get isMuted(): boolean {\n return this.metadataMuted;\n }\n\n get isEnabled(): boolean {\n return true;\n }\n\n get isSubscribed(): boolean {\n return this.track !== undefined;\n }\n\n /**\n * an [AudioTrack] if this publication holds an audio track\n */\n get audioTrack(): LocalAudioTrack | RemoteAudioTrack | undefined {\n if (this.track instanceof LocalAudioTrack || this.track instanceof RemoteAudioTrack) {\n return this.track;\n }\n }\n\n /**\n * an [VideoTrack] if this publication holds a video track\n */\n get videoTrack(): LocalVideoTrack | RemoteVideoTrack | undefined {\n if (this.track instanceof LocalVideoTrack || this.track instanceof RemoteVideoTrack) {\n return this.track;\n }\n }\n\n handleMuted = () => {\n this.emit(TrackEvent.Muted);\n };\n\n handleUnmuted = () => {\n this.emit(TrackEvent.Unmuted);\n };\n\n /** @internal */\n updateInfo(info: TrackInfo) {\n this.trackSid = info.sid;\n this.trackName = info.name;\n this.source = Track.sourceFromProto(info.source);\n this.mimeType = info.mimeType;\n if (this.kind === Track.Kind.Video && info.width > 0) {\n this.dimensions = {\n width: info.width,\n height: info.height,\n };\n this.simulcasted = info.simulcast;\n }\n this.trackInfo = info;\n }\n}\n\nexport namespace TrackPublication {\n export enum SubscriptionStatus {\n Subscribed = 'subscribed',\n NotAllowed = 'not_allowed',\n Unsubscribed = 'unsubscribed',\n }\n}\n","import { TrackInfo } from '../../proto/livekit_models';\nimport { TrackEvent } from '../events';\nimport LocalAudioTrack from './LocalAudioTrack';\nimport LocalTrack from './LocalTrack';\nimport LocalVideoTrack from './LocalVideoTrack';\nimport { TrackPublishOptions } from './options';\nimport { Track } from './Track';\nimport { TrackPublication } from './TrackPublication';\n\nexport default class LocalTrackPublication extends TrackPublication {\n track?: LocalTrack = undefined;\n\n options?: TrackPublishOptions;\n\n get isUpstreamPaused() {\n return this.track?.isUpstreamPaused;\n }\n\n constructor(kind: Track.Kind, ti: TrackInfo, track?: LocalTrack) {\n super(kind, ti.sid, ti.name);\n\n this.updateInfo(ti);\n this.setTrack(track);\n }\n\n setTrack(track?: Track) {\n if (this.track) {\n this.track.off(TrackEvent.Ended, this.handleTrackEnded);\n }\n\n super.setTrack(track);\n\n if (track) {\n track.on(TrackEvent.Ended, this.handleTrackEnded);\n }\n }\n\n get isMuted(): boolean {\n if (this.track) {\n return this.track.isMuted;\n }\n return super.isMuted;\n }\n\n get audioTrack(): LocalAudioTrack | undefined {\n return super.audioTrack as LocalAudioTrack | undefined;\n }\n\n get videoTrack(): LocalVideoTrack | undefined {\n return super.videoTrack as LocalVideoTrack | undefined;\n }\n\n /**\n * Mute the track associated with this publication\n */\n async mute() {\n return this.track?.mute();\n }\n\n /**\n * Unmute track associated with this publication\n */\n async unmute() {\n return this.track?.unmute();\n }\n\n /**\n * Pauses the media stream track associated with this publication from being sent to the server\n * and signals \"muted\" event to other participants\n * Useful if you want to pause the stream without pausing the local media stream track\n */\n async pauseUpstream() {\n await this.track?.pauseUpstream();\n }\n\n /**\n * Resumes sending the media stream track associated with this publication to the server after a call to [[pauseUpstream()]]\n * and signals \"unmuted\" event to other participants (unless the track is explicitly muted)\n */\n async resumeUpstream() {\n await this.track?.resumeUpstream();\n }\n\n handleTrackEnded = () => {\n this.emit(TrackEvent.Ended);\n };\n}\n","import { Track } from './Track';\n\nexport interface TrackPublishDefaults {\n /**\n * encoding parameters for camera track\n */\n videoEncoding?: VideoEncoding;\n\n /**\n * encoding parameters for screen share track\n */\n screenShareEncoding?: VideoEncoding;\n\n /**\n * codec, defaults to vp8\n */\n videoCodec?: VideoCodec;\n\n /**\n * max audio bitrate, defaults to [[AudioPresets.speech]]\n */\n audioBitrate?: number;\n\n /**\n * dtx (Discontinuous Transmission of audio), defaults to true\n */\n dtx?: boolean;\n\n /**\n * use simulcast, defaults to true.\n * When using simulcast, LiveKit will publish up to three versions of the stream\n * at various resolutions.\n */\n simulcast?: boolean;\n\n /**\n * custom video simulcast layers for camera tracks, defaults to h180, h360, h540\n * You can specify up to two custom layers that will be used instead of\n * the LiveKit default layers.\n * Note: the layers need to be ordered from lowest to highest quality\n */\n videoSimulcastLayers?: Array<VideoPreset>;\n\n /**\n * custom video simulcast layers for screen tracks\n * Note: the layers need to be ordered from lowest to highest quality\n */\n screenShareSimulcastLayers?: Array<VideoPreset>;\n\n /**\n * For local tracks, stop the underlying MediaStreamTrack when the track is muted (or paused)\n * on some platforms, this option is necessary to disable the microphone recording indicator.\n * Note: when this is enabled, and BT devices are connected, they will transition between\n * profiles (e.g. HFP to A2DP) and there will be an audible difference in playback.\n *\n * defaults to false\n */\n stopMicTrackOnMute?: boolean;\n}\n\n/**\n * Options when publishing tracks\n */\nexport interface TrackPublishOptions extends TrackPublishDefaults {\n /**\n * set a track name\n */\n name?: string;\n\n /**\n * Source of track, camera, microphone, or screen\n */\n source?: Track.Source;\n}\n\nexport interface CreateLocalTracksOptions {\n /**\n * audio track options, true to create with defaults. false if audio shouldn't be created\n * default true\n */\n audio?: boolean | AudioCaptureOptions;\n\n /**\n * video track options, true to create with defaults. false if video shouldn't be created\n * default true\n */\n video?: boolean | VideoCaptureOptions;\n}\n\nexport interface VideoCaptureOptions {\n /**\n * A ConstrainDOMString object specifying a device ID or an array of device\n * IDs which are acceptable and/or required.\n */\n deviceId?: ConstrainDOMString;\n\n /**\n * a facing or an array of facings which are acceptable and/or required.\n */\n facingMode?: 'user' | 'environment' | 'left' | 'right';\n\n resolution?: VideoResolution;\n}\n\nexport interface ScreenShareCaptureOptions {\n /**\n * true to capture audio shared. browser support for audio capturing in\n * screenshare is limited: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#browser_compatibility\n */\n audio?: boolean;\n\n /** capture resolution, defaults to full HD */\n resolution?: VideoResolution;\n}\n\nexport interface AudioCaptureOptions {\n /**\n * specifies whether automatic gain control is preferred and/or required\n */\n autoGainControl?: ConstrainBoolean;\n\n /**\n * the channel count or range of channel counts which are acceptable and/or required\n */\n channelCount?: ConstrainULong;\n\n /**\n * A ConstrainDOMString object specifying a device ID or an array of device\n * IDs which are acceptable and/or required.\n */\n deviceId?: ConstrainDOMString;\n\n /**\n * whether or not echo cancellation is preferred and/or required\n */\n echoCancellation?: ConstrainBoolean;\n\n /**\n * the latency or range of latencies which are acceptable and/or required.\n */\n latency?: ConstrainDouble;\n\n /**\n * whether noise suppression is preferred and/or required.\n */\n noiseSuppression?: ConstrainBoolean;\n\n /**\n * the sample rate or range of sample rates which are acceptable and/or required.\n */\n sampleRate?: ConstrainULong;\n\n /**\n * sample size or range of sample sizes which are acceptable and/or required.\n */\n sampleSize?: ConstrainULong;\n}\n\nexport interface VideoResolution {\n width: number;\n height: number;\n frameRate?: number;\n aspectRatio?: number;\n}\n\nexport interface VideoEncoding {\n maxBitrate: number;\n maxFramerate?: number;\n}\n\nexport class VideoPreset {\n encoding: VideoEncoding;\n\n width: number;\n\n height: number;\n\n constructor(width: number, height: number, maxBitrate: number, maxFramerate?: number) {\n this.width = width;\n this.height = height;\n this.encoding = {\n maxBitrate,\n maxFramerate,\n };\n }\n\n get resolution(): VideoResolution {\n return {\n width: this.width,\n height: this.height,\n frameRate: this.encoding.maxFramerate,\n aspectRatio: this.width / this.height,\n };\n }\n}\n\nexport interface AudioPreset {\n maxBitrate: number;\n}\n\nexport type VideoCodec = 'vp8' | 'h264' | 'av1' | 'vp9';\n\nexport namespace AudioPresets {\n export const telephone: AudioPreset = {\n maxBitrate: 12_000,\n };\n export const speech: AudioPreset = {\n maxBitrate: 20_000,\n };\n export const music: AudioPreset = {\n maxBitrate: 32_000,\n };\n}\n\n/**\n * Sane presets for video resolution/encoding\n */\nexport const VideoPresets = {\n h90: new VideoPreset(160, 90, 60_000, 15),\n h180: new VideoPreset(320, 180, 120_000, 15),\n h216: new VideoPreset(384, 216, 180_000, 15),\n h360: new VideoPreset(640, 360, 300_000, 20),\n h540: new VideoPreset(960, 540, 600_000, 25),\n h720: new VideoPreset(1280, 720, 2_000_000, 30),\n h1080: new VideoPreset(1920, 1080, 3_000_000, 30),\n h1440: new VideoPreset(2560, 1440, 5_000_000, 30),\n h2160: new VideoPreset(3840, 2160, 8_000_000, 30),\n /** @deprecated */\n qvga: new VideoPreset(320, 180, 120_000, 10),\n /** @deprecated */\n vga: new VideoPreset(640, 360, 300_000, 20),\n /** @deprecated */\n qhd: new VideoPreset(960, 540, 600_000, 25),\n /** @deprecated */\n hd: new VideoPreset(1280, 720, 2_000_000, 30),\n /** @deprecated */\n fhd: new VideoPreset(1920, 1080, 3_000_000, 30),\n} as const;\n\n/**\n * Four by three presets\n */\nexport const VideoPresets43 = {\n h120: new VideoPreset(160, 120, 80_000, 15),\n h180: new VideoPreset(240, 180, 100_000, 15),\n h240: new VideoPreset(320, 240, 150_000, 15),\n h360: new VideoPreset(480, 360, 225_000, 20),\n h480: new VideoPreset(640, 480, 300_000, 20),\n h540: new VideoPreset(720, 540, 450_000, 25),\n h720: new VideoPreset(960, 720, 1_500_000, 30),\n h1080: new VideoPreset(1440, 1080, 2_500_000, 30),\n h1440: new VideoPreset(1920, 1440, 3_500_000, 30),\n /** @deprecated */\n qvga: new VideoPreset(240, 180, 90_000, 10),\n /** @deprecated */\n vga: new VideoPreset(480, 360, 225_000, 20),\n /** @deprecated */\n qhd: new VideoPreset(720, 540, 450_000, 25),\n /** @deprecated */\n hd: new VideoPreset(960, 720, 1_500_000, 30),\n /** @deprecated */\n fhd: new VideoPreset(1440, 1080, 2_800_000, 30),\n} as const;\n\nexport const ScreenSharePresets = {\n h360fps3: new VideoPreset(640, 360, 200_000, 3),\n h720fps5: new VideoPreset(1280, 720, 400_000, 5),\n h720fps15: new VideoPreset(1280, 720, 1_000_000, 15),\n h1080fps15: new VideoPreset(1920, 1080, 1_500_000, 15),\n h1080fps30: new VideoPreset(1920, 1080, 3_000_000, 30),\n /** @deprecated */\n vga: new VideoPreset(640, 360, 200_000, 3),\n /** @deprecated */\n hd_8: new VideoPreset(1280, 720, 400_000, 5),\n /** @deprecated */\n hd_15: new VideoPreset(1280, 720, 1_000_000, 15),\n /** @deprecated */\n fhd_15: new VideoPreset(1920, 1080, 1_500_000, 15),\n /** @deprecated */\n fhd_30: new VideoPreset(1920, 1080, 3_000_000, 30),\n} as const;\n","import { EventEmitter } from 'events';\nimport type TypedEmitter from 'typed-emitter';\nimport {\n ConnectionQuality as ProtoQuality,\n DataPacket_Kind,\n ParticipantInfo,\n ParticipantPermission,\n} from '../../proto/livekit_models';\nimport { ParticipantEvent, TrackEvent } from '../events';\nimport LocalTrackPublication from '../track/LocalTrackPublication';\nimport RemoteTrackPublication from '../track/RemoteTrackPublication';\nimport { Track } from '../track/Track';\nimport { TrackPublication } from '../track/TrackPublication';\nimport { RemoteTrack } from '../track/types';\n\nexport enum ConnectionQuality {\n Excellent = 'excellent',\n Good = 'good',\n Poor = 'poor',\n Unknown = 'unknown',\n}\n\nfunction qualityFromProto(q: ProtoQuality): ConnectionQuality {\n switch (q) {\n case ProtoQuality.EXCELLENT:\n return ConnectionQuality.Excellent;\n case ProtoQuality.GOOD:\n return ConnectionQuality.Good;\n case ProtoQuality.POOR:\n return ConnectionQuality.Poor;\n default:\n return ConnectionQuality.Unknown;\n }\n}\n\nexport default class Participant extends (EventEmitter as new () => TypedEmitter<ParticipantEventCallbacks>) {\n protected participantInfo?: ParticipantInfo;\n\n audioTracks: Map<string, TrackPublication>;\n\n videoTracks: Map<string, TrackPublication>;\n\n /** map of track sid => all published tracks */\n tracks: Map<string, TrackPublication>;\n\n /** audio level between 0-1.0, 1 being loudest, 0 being softest */\n audioLevel: number = 0;\n\n /** if participant is currently speaking */\n isSpeaking: boolean = false;\n\n /** server assigned unique id */\n sid: string;\n\n /** client assigned identity, encoded in JWT token */\n identity: string;\n\n /** client assigned display name, encoded in JWT token */\n name?: string;\n\n /** client metadata, opaque to livekit */\n metadata?: string;\n\n lastSpokeAt?: Date | undefined;\n\n permissions?: ParticipantPermission;\n\n private _connectionQuality: ConnectionQuality = ConnectionQuality.Unknown;\n\n /** @internal */\n constructor(sid: string, identity: string) {\n super();\n this.sid = sid;\n this.identity = identity;\n this.audioTracks = new Map();\n this.videoTracks = new Map();\n this.tracks = new Map();\n }\n\n getTracks(): TrackPublication[] {\n return Array.from(this.tracks.values());\n }\n\n /**\n * Finds the first track that matches the source filter, for example, getting\n * the user's camera track with getTrackBySource(Track.Source.Camera).\n * @param source\n * @returns\n */\n getTrack(source: Track.Source): TrackPublication | undefined {\n if (source === Track.Source.Unknown) {\n return;\n }\n for (const [, pub] of this.tracks) {\n if (pub.source === source) {\n return pub;\n }\n if (pub.source === Track.Source.Unknown) {\n if (\n source === Track.Source.Microphone &&\n pub.kind === Track.Kind.Audio &&\n pub.trackName !== 'screen'\n ) {\n return pub;\n }\n if (\n source === Track.Source.Camera &&\n pub.kind === Track.Kind.Video &&\n pub.trackName !== 'screen'\n ) {\n return pub;\n }\n if (\n source === Track.Source.ScreenShare &&\n pub.kind === Track.Kind.Video &&\n pub.trackName === 'screen'\n ) {\n return pub;\n }\n if (\n source === Track.Source.ScreenShareAudio &&\n pub.kind === Track.Kind.Audio &&\n pub.trackName === 'screen'\n ) {\n return pub;\n }\n }\n }\n }\n\n /**\n * Finds the first track that matches the track's name.\n * @param name\n * @returns\n */\n getTrackByName(name: string): TrackPublication | undefined {\n for (const [, pub] of this.tracks) {\n if (pub.trackName === name) {\n return pub;\n }\n }\n }\n\n get connectionQuality(): ConnectionQuality {\n return this._connectionQuality;\n }\n\n get isCameraEnabled(): boolean {\n const track = this.getTrack(Track.Source.Camera);\n return !(track?.isMuted ?? true);\n }\n\n get isMicrophoneEnabled(): boolean {\n const track = this.getTrack(Track.Source.Microphone);\n return !(track?.isMuted ?? true);\n }\n\n get isScreenShareEnabled(): boolean {\n const track = this.getTrack(Track.Source.ScreenShare);\n return !!track;\n }\n\n /** when participant joined the room */\n get joinedAt(): Date | undefined {\n if (this.participantInfo) {\n return new Date(this.participantInfo.joinedAt * 1000);\n }\n return new Date();\n }\n\n /** @internal */\n updateInfo(info: ParticipantInfo) {\n this.identity = info.identity;\n this.sid = info.sid;\n this.name = info.name;\n this.setMetadata(info.metadata);\n if (info.permission) {\n this.setPermissions(info.permission);\n }\n // set this last so setMetadata can detect changes\n this.participantInfo = info;\n }\n\n /** @internal */\n setMetadata(md: string) {\n const changed = this.metadata !== md;\n const prevMetadata = this.metadata;\n this.metadata = md;\n\n if (changed) {\n this.emit(ParticipantEvent.MetadataChanged, prevMetadata);\n this.emit(ParticipantEvent.ParticipantMetadataChanged, prevMetadata);\n }\n }\n\n /** @internal */\n setPermissions(permissions: ParticipantPermission): boolean {\n const changed =\n permissions.canPublish !== this.permissions?.canPublish ||\n permissions.canSubscribe !== this.permissions?.canSubscribe ||\n permissions.canPublishData !== this.permissions?.canPublishData ||\n permissions.hidden !== this.permissions?.hidden ||\n permissions.recorder !== this.permissions?.recorder;\n this.permissions = permissions;\n\n return changed;\n }\n\n /** @internal */\n setIsSpeaking(speaking: boolean) {\n if (speaking === this.isSpeaking) {\n return;\n }\n this.isSpeaking = speaking;\n if (speaking) {\n this.lastSpokeAt = new Date();\n }\n this.emit(ParticipantEvent.IsSpeakingChanged, speaking);\n }\n\n /** @internal */\n setConnectionQuality(q: ProtoQuality) {\n const prevQuality = this._connectionQuality;\n this._connectionQuality = qualityFromProto(q);\n if (prevQuality !== this._connectionQuality) {\n this.emit(ParticipantEvent.ConnectionQualityChanged, this._connectionQuality);\n }\n }\n\n protected addTrackPublication(publication: TrackPublication) {\n // forward publication driven events\n publication.on(TrackEvent.Muted, () => {\n this.emit(ParticipantEvent.TrackMuted, publication);\n });\n\n publication.on(TrackEvent.Unmuted, () => {\n this.emit(ParticipantEvent.TrackUnmuted, publication);\n });\n\n const pub = publication;\n if (pub.track) {\n pub.track.sid = publication.trackSid;\n }\n\n this.tracks.set(publication.trackSid, publication);\n switch (publication.kind) {\n case Track.Kind.Audio:\n this.audioTracks.set(publication.trackSid, publication);\n break;\n case Track.Kind.Video:\n this.videoTracks.set(publication.trackSid, publication);\n break;\n default:\n break;\n }\n }\n}\n\nexport type ParticipantEventCallbacks = {\n trackPublished: (publication: RemoteTrackPublication) => void;\n trackSubscribed: (track: RemoteTrack, publication: RemoteTrackPublication) => void;\n trackSubscriptionFailed: (trackSid: string) => void;\n trackUnpublished: (publication: RemoteTrackPublication) => void;\n trackUnsubscribed: (track: RemoteTrack, publication: RemoteTrackPublication) => void;\n trackMuted: (publication: TrackPublication) => void;\n trackUnmuted: (publication: TrackPublication) => void;\n localTrackPublished: (publication: LocalTrackPublication) => void;\n localTrackUnpublished: (publication: LocalTrackPublication) => void;\n /**\n * @deprecated use [[participantMetadataChanged]] instead\n */\n metadataChanged: (prevMetadata: string | undefined, participant?: any) => void;\n participantMetadataChanged: (prevMetadata: string | undefined, participant?: any) => void;\n dataReceived: (payload: Uint8Array, kind: DataPacket_Kind) => void;\n isSpeakingChanged: (speaking: boolean) => void;\n connectionQualityChanged: (connectionQuality: ConnectionQuality) => void;\n trackStreamStateChanged: (\n publication: RemoteTrackPublication,\n streamState: Track.StreamState,\n ) => void;\n trackSubscriptionPermissionChanged: (\n publication: RemoteTrackPublication,\n status: TrackPublication.SubscriptionStatus,\n ) => void;\n mediaDevicesError: (error: Error) => void;\n participantPermissionsChanged: (prevPermissions: ParticipantPermission) => void;\n};\n","import log from '../../logger';\nimport { TrackInvalidError } from '../errors';\nimport LocalAudioTrack from '../track/LocalAudioTrack';\nimport LocalVideoTrack from '../track/LocalVideoTrack';\nimport {\n ScreenSharePresets,\n TrackPublishOptions,\n VideoEncoding,\n VideoPreset,\n VideoPresets,\n VideoPresets43,\n} from '../track/options';\n\n/** @internal */\nexport function mediaTrackToLocalTrack(\n mediaStreamTrack: MediaStreamTrack,\n constraints?: MediaTrackConstraints,\n): LocalVideoTrack | LocalAudioTrack {\n switch (mediaStreamTrack.kind) {\n case 'audio':\n return new LocalAudioTrack(mediaStreamTrack, constraints);\n case 'video':\n return new LocalVideoTrack(mediaStreamTrack, constraints);\n default:\n throw new TrackInvalidError(`unsupported track type: ${mediaStreamTrack.kind}`);\n }\n}\n\n/* @internal */\nexport const presets169 = Object.values(VideoPresets);\n\n/* @internal */\nexport const presets43 = Object.values(VideoPresets43);\n\n/* @internal */\nexport const presetsScreenShare = Object.values(ScreenSharePresets);\n\n/* @internal */\nexport const defaultSimulcastPresets169 = [VideoPresets.h180, VideoPresets.h360];\n\n/* @internal */\nexport const defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h360];\n\n/* @internal */\nexport const computeDefaultScreenShareSimulcastPresets = (fromPreset: VideoPreset) => {\n const layers = [{ scaleResolutionDownBy: 2, fps: 3 }];\n return layers.map(\n (t) =>\n new VideoPreset(\n Math.floor(fromPreset.width / t.scaleResolutionDownBy),\n Math.floor(fromPreset.height / t.scaleResolutionDownBy),\n Math.max(\n 150_000,\n Math.floor(\n fromPreset.encoding.maxBitrate /\n (t.scaleResolutionDownBy ** 2 * ((fromPreset.encoding.maxFramerate ?? 30) / t.fps)),\n ),\n ),\n t.fps,\n ),\n );\n};\n\nconst videoRids = ['q', 'h', 'f'];\n\n/* @internal */\nexport function computeVideoEncodings(\n isScreenShare: boolean,\n width?: number,\n height?: number,\n options?: TrackPublishOptions,\n): RTCRtpEncodingParameters[] {\n let videoEncoding: VideoEncoding | undefined = options?.videoEncoding;\n if (isScreenShare) {\n videoEncoding = options?.screenShareEncoding;\n }\n const useSimulcast = options?.simulcast;\n\n if ((!videoEncoding && !useSimulcast) || !width || !height) {\n // when we aren't simulcasting, will need to return a single encoding without\n // capping bandwidth. we always require a encoding for dynacast\n return [{}];\n }\n\n if (!videoEncoding) {\n // find the right encoding based on width/height\n videoEncoding = determineAppropriateEncoding(isScreenShare, width, height);\n log.debug('using video encoding', videoEncoding);\n }\n\n if (!useSimulcast) {\n return [videoEncoding];\n }\n const original = new VideoPreset(\n width,\n height,\n videoEncoding.maxBitrate,\n videoEncoding.maxFramerate,\n );\n let presets: Array<VideoPreset> = [];\n if (isScreenShare) {\n presets =\n sortPresets(options?.screenShareSimulcastLayers) ??\n defaultSimulcastLayers(isScreenShare, original);\n } else {\n presets =\n sortPresets(options?.videoSimulcastLayers) ?? defaultSimulcastLayers(isScreenShare, original);\n }\n let midPreset: VideoPreset | undefined;\n const lowPreset = presets[0];\n if (presets.length > 1) {\n [, midPreset] = presets;\n }\n\n // NOTE:\n // 1. Ordering of these encodings is important. Chrome seems\n // to use the index into encodings to decide which layer\n // to disable when CPU constrained.\n // So encodings should be ordered in increasing spatial\n // resolution order.\n // 2. ion-sfu translates rids into layers. So, all encodings\n // should have the base layer `q` and then more added\n // based on other conditions.\n const size = Math.max(width, height);\n if (size >= 960 && midPreset) {\n return encodingsFromPresets(width, height, [lowPreset, midPreset, original]);\n }\n if (size >= 480) {\n return encodingsFromPresets(width, height, [lowPreset, original]);\n }\n return encodingsFromPresets(width, height, [original]);\n}\n\n/* @internal */\nexport function determineAppropriateEncoding(\n isScreenShare: boolean,\n width: number,\n height: number,\n): VideoEncoding {\n const presets = presetsForResolution(isScreenShare, width, height);\n let { encoding } = presets[0];\n\n // handle portrait by swapping dimensions\n const size = Math.max(width, height);\n\n for (let i = 0; i < presets.length; i += 1) {\n const preset = presets[i];\n encoding = preset.encoding;\n if (preset.width >= size) {\n break;\n }\n }\n\n return encoding;\n}\n\n/* @internal */\nexport function presetsForResolution(\n isScreenShare: boolean,\n width: number,\n height: number,\n): VideoPreset[] {\n if (isScreenShare) {\n return presetsScreenShare;\n }\n const aspect = width > height ? width / height : height / width;\n if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n return presets169;\n }\n return presets43;\n}\n\n/* @internal */\nexport function defaultSimulcastLayers(\n isScreenShare: boolean,\n original: VideoPreset,\n): VideoPreset[] {\n if (isScreenShare) {\n return computeDefaultScreenShareSimulcastPresets(original);\n }\n const { width, height } = original;\n const aspect = width > height ? width / height : height / width;\n if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n return defaultSimulcastPresets169;\n }\n return defaultSimulcastPresets43;\n}\n\n// presets should be ordered by low, medium, high\nfunction encodingsFromPresets(\n width: number,\n height: number,\n presets: VideoPreset[],\n): RTCRtpEncodingParameters[] {\n const encodings: RTCRtpEncodingParameters[] = [];\n presets.forEach((preset, idx) => {\n if (idx >= videoRids.length) {\n return;\n }\n const size = Math.min(width, height);\n const rid = videoRids[idx];\n encodings.push({\n rid,\n scaleResolutionDownBy: size / Math.min(preset.width, preset.height),\n maxBitrate: preset.encoding.maxBitrate,\n /* @ts-ignore */\n maxFramerate: preset.encoding.maxFramerate,\n });\n });\n return encodings;\n}\n\n/** @internal */\nexport function sortPresets(presets: Array<VideoPreset> | undefined) {\n if (!presets) return;\n return presets.sort((a, b) => {\n const { encoding: aEnc } = a;\n const { encoding: bEnc } = b;\n\n if (aEnc.maxBitrate > bEnc.maxBitrate) {\n return 1;\n }\n if (aEnc.maxBitrate < bEnc.maxBitrate) return -1;\n if (aEnc.maxBitrate === bEnc.maxBitrate && aEnc.maxFramerate && bEnc.maxFramerate) {\n return aEnc.maxFramerate > bEnc.maxFramerate ? 1 : -1;\n }\n return 0;\n });\n}\n","import log from '../../logger';\nimport { TrackInfo, VideoQuality } from '../../proto/livekit_models';\nimport { UpdateSubscription, UpdateTrackSettings } from '../../proto/livekit_rtc';\nimport { TrackEvent } from '../events';\nimport RemoteVideoTrack from './RemoteVideoTrack';\nimport { Track } from './Track';\nimport { TrackPublication } from './TrackPublication';\nimport { RemoteTrack } from './types';\n\nexport default class RemoteTrackPublication extends TrackPublication {\n track?: RemoteTrack;\n\n /** @internal */\n _allowed = true;\n\n // keeps track of client's desire to subscribe to a track\n protected subscribed?: boolean;\n\n protected disabled: boolean = false;\n\n protected currentVideoQuality?: VideoQuality = VideoQuality.HIGH;\n\n protected videoDimensions?: Track.Dimensions;\n\n /**\n * Subscribe or unsubscribe to this remote track\n * @param subscribed true to subscribe to a track, false to unsubscribe\n */\n setSubscribed(subscribed: boolean) {\n this.subscribed = subscribed;\n\n const sub: UpdateSubscription = {\n trackSids: [this.trackSid],\n subscribe: this.subscribed,\n participantTracks: [\n {\n // sending an empty participant id since TrackPublication doesn't keep it\n // this is filled in by the participant that receives this message\n participantSid: '',\n trackSids: [this.trackSid],\n },\n ],\n };\n this.emit(TrackEvent.UpdateSubscription, sub);\n }\n\n get subscriptionStatus(): TrackPublication.SubscriptionStatus {\n if (this.subscribed === false || !super.isSubscribed) {\n return TrackPublication.SubscriptionStatus.Unsubscribed;\n }\n if (!this._allowed) {\n return TrackPublication.SubscriptionStatus.NotAllowed;\n }\n return TrackPublication.SubscriptionStatus.Subscribed;\n }\n\n /**\n * Returns true if track is subscribed, and ready for playback\n */\n get isSubscribed(): boolean {\n if (this.subscribed === false) {\n return false;\n }\n if (!this._allowed) {\n return false;\n }\n return super.isSubscribed;\n }\n\n get isEnabled(): boolean {\n return !this.disabled;\n }\n\n /**\n * disable server from sending down data for this track. this is useful when\n * the participant is off screen, you may disable streaming down their video\n * to reduce bandwidth requirements\n * @param enabled\n */\n setEnabled(enabled: boolean) {\n if (!this.isManualOperationAllowed() || this.disabled === !enabled) {\n return;\n }\n this.disabled = !enabled;\n\n this.emitTrackUpdate();\n }\n\n /**\n * for tracks that support simulcasting, adjust subscribed quality\n *\n * This indicates the highest quality the client can accept. if network\n * bandwidth does not allow, server will automatically reduce quality to\n * optimize for uninterrupted video\n */\n setVideoQuality(quality: VideoQuality) {\n if (!this.isManualOperationAllowed() || this.currentVideoQuality === quality) {\n return;\n }\n this.currentVideoQuality = quality;\n this.videoDimensions = undefined;\n\n this.emitTrackUpdate();\n }\n\n setVideoDimensions(dimensions: Track.Dimensions) {\n if (!this.isManualOperationAllowed()) {\n return;\n }\n if (\n this.videoDimensions?.width === dimensions.width &&\n this.videoDimensions?.height === dimensions.height\n ) {\n return;\n }\n if (this.track instanceof RemoteVideoTrack) {\n this.videoDimensions = dimensions;\n }\n this.currentVideoQuality = undefined;\n\n this.emitTrackUpdate();\n }\n\n get videoQuality(): VideoQuality | undefined {\n return this.currentVideoQuality;\n }\n\n setTrack(track?: Track) {\n if (this.track) {\n // unregister listener\n this.track.off(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n this.track.off(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n this.track.off(TrackEvent.Ended, this.handleEnded);\n }\n super.setTrack(track);\n if (track) {\n track.sid = this.trackSid;\n track.on(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n track.on(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n track.on(TrackEvent.Ended, this.handleEnded);\n }\n }\n\n /** @internal */\n updateInfo(info: TrackInfo) {\n super.updateInfo(info);\n this.metadataMuted = info.muted;\n this.track?.setMuted(info.muted);\n }\n\n private isManualOperationAllowed(): boolean {\n if (this.isAdaptiveStream) {\n log.warn('adaptive stream is enabled, cannot change track settings', {\n trackSid: this.trackSid,\n });\n return false;\n }\n if (!this.isSubscribed) {\n log.warn('cannot update track settings when not subscribed', { trackSid: this.trackSid });\n return false;\n }\n return true;\n }\n\n protected handleEnded = (track: RemoteTrack) => {\n this.emit(TrackEvent.Ended, track);\n };\n\n protected get isAdaptiveStream(): boolean {\n return this.track instanceof RemoteVideoTrack && this.track.isAdaptiveStream;\n }\n\n protected handleVisibilityChange = (visible: boolean) => {\n log.debug(`adaptivestream video visibility ${this.trackSid}, visible=${visible}`, {\n trackSid: this.trackSid,\n });\n this.disabled = !visible;\n this.emitTrackUpdate();\n };\n\n protected handleVideoDimensionsChange = (dimensions: Track.Dimensions) => {\n log.debug(`adaptivestream video dimensions ${dimensions.width}x${dimensions.height}`, {\n trackSid: this.trackSid,\n });\n this.videoDimensions = dimensions;\n this.emitTrackUpdate();\n };\n\n /* @internal */\n emitTrackUpdate() {\n const settings: UpdateTrackSettings = UpdateTrackSettings.fromPartial({\n trackSids: [this.trackSid],\n disabled: this.disabled,\n });\n if (this.videoDimensions) {\n settings.width = this.videoDimensions.width;\n settings.height = this.videoDimensions.height;\n } else if (this.currentVideoQuality !== undefined) {\n settings.quality = this.currentVideoQuality;\n } else {\n // defaults to high quality\n settings.quality = VideoQuality.HIGH;\n }\n\n this.emit(TrackEvent.UpdateSettings, settings);\n }\n}\n","import { SignalClient } from '../../api/SignalClient';\nimport log from '../../logger';\nimport { ParticipantInfo } from '../../proto/livekit_models';\nimport { UpdateSubscription, UpdateTrackSettings } from '../../proto/livekit_rtc';\nimport { ParticipantEvent, TrackEvent } from '../events';\nimport RemoteAudioTrack from '../track/RemoteAudioTrack';\nimport RemoteTrackPublication from '../track/RemoteTrackPublication';\nimport RemoteVideoTrack from '../track/RemoteVideoTrack';\nimport { Track } from '../track/Track';\nimport { AdaptiveStreamSettings, RemoteTrack } from '../track/types';\nimport Participant, { ParticipantEventCallbacks } from './Participant';\n\nexport default class RemoteParticipant extends Participant {\n audioTracks: Map<string, RemoteTrackPublication>;\n\n videoTracks: Map<string, RemoteTrackPublication>;\n\n tracks: Map<string, RemoteTrackPublication>;\n\n signalClient: SignalClient;\n\n /** @internal */\n static fromParticipantInfo(signalClient: SignalClient, pi: ParticipantInfo): RemoteParticipant {\n const rp = new RemoteParticipant(signalClient, pi.sid, pi.identity);\n rp.updateInfo(pi);\n return rp;\n }\n\n /** @internal */\n constructor(signalClient: SignalClient, id: string, name?: string) {\n super(id, name || '');\n this.signalClient = signalClient;\n this.tracks = new Map();\n this.audioTracks = new Map();\n this.videoTracks = new Map();\n }\n\n protected addTrackPublication(publication: RemoteTrackPublication) {\n super.addTrackPublication(publication);\n\n // register action events\n publication.on(TrackEvent.UpdateSettings, (settings: UpdateTrackSettings) => {\n this.signalClient.sendUpdateTrackSettings(settings);\n });\n publication.on(TrackEvent.UpdateSubscription, (sub: UpdateSubscription) => {\n sub.participantTracks.forEach((pt) => {\n pt.participantSid = this.sid;\n });\n this.signalClient.sendUpdateSubscription(sub);\n });\n publication.on(TrackEvent.Ended, (track: RemoteTrack) => {\n this.emit(ParticipantEvent.TrackUnsubscribed, track, publication);\n });\n }\n\n getTrack(source: Track.Source): RemoteTrackPublication | undefined {\n const track = super.getTrack(source);\n if (track) {\n return track as RemoteTrackPublication;\n }\n }\n\n getTrackByName(name: string): RemoteTrackPublication | undefined {\n const track = super.getTrackByName(name);\n if (track) {\n return track as RemoteTrackPublication;\n }\n }\n\n /**\n * sets the volume on the participant's microphone track if it exists.\n */\n setVolume(volume: number) {\n const audioPublication = this.getTrack(Track.Source.Microphone);\n if (audioPublication) {\n (audioPublication.track as RemoteAudioTrack).setVolume(volume);\n }\n }\n\n /**\n * gets the volume on the participant's microphone track\n * returns undefined if no microphone track exists\n */\n getVolume() {\n const audioPublication = this.getTrack(Track.Source.Microphone);\n if (audioPublication) {\n return (audioPublication.track as RemoteAudioTrack).getVolume();\n }\n }\n\n /** @internal */\n addSubscribedMediaTrack(\n mediaTrack: MediaStreamTrack,\n sid: Track.SID,\n mediaStream: MediaStream,\n receiver?: RTCRtpReceiver,\n adaptiveStreamSettings?: AdaptiveStreamSettings,\n triesLeft?: number,\n ) {\n // find the track publication\n // it's possible for the media track to arrive before participant info\n let publication = this.getTrackPublication(sid);\n\n // it's also possible that the browser didn't honor our original track id\n // FireFox would use its own local uuid instead of server track id\n if (!publication) {\n if (!sid.startsWith('TR')) {\n // find the first track that matches type\n this.tracks.forEach((p) => {\n if (!publication && mediaTrack.kind === p.kind.toString()) {\n publication = p;\n }\n });\n }\n }\n\n // when we couldn't locate the track, it's possible that the metadata hasn't\n // yet arrived. Wait a bit longer for it to arrive, or fire an error\n if (!publication) {\n if (triesLeft === 0) {\n log.error('could not find published track', { participant: this.sid, trackSid: sid });\n this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n return;\n }\n\n if (triesLeft === undefined) triesLeft = 20;\n setTimeout(() => {\n this.addSubscribedMediaTrack(\n mediaTrack,\n sid,\n mediaStream,\n receiver,\n adaptiveStreamSettings,\n triesLeft! - 1,\n );\n }, 150);\n return;\n }\n\n const isVideo = mediaTrack.kind === 'video';\n let track: RemoteTrack;\n if (isVideo) {\n track = new RemoteVideoTrack(mediaTrack, sid, receiver, adaptiveStreamSettings);\n } else {\n track = new RemoteAudioTrack(mediaTrack, sid, receiver);\n }\n\n // set track info\n track.source = publication.source;\n // keep publication's muted status\n track.isMuted = publication.isMuted;\n track.setMediaStream(mediaStream);\n track.start();\n\n publication.setTrack(track);\n\n this.emit(ParticipantEvent.TrackSubscribed, track, publication);\n\n return publication;\n }\n\n /** @internal */\n get hasMetadata(): boolean {\n return !!this.participantInfo;\n }\n\n getTrackPublication(sid: Track.SID): RemoteTrackPublication | undefined {\n return this.tracks.get(sid);\n }\n\n /** @internal */\n updateInfo(info: ParticipantInfo) {\n const alreadyHasMetadata = this.hasMetadata;\n\n super.updateInfo(info);\n\n // we are getting a list of all available tracks, reconcile in here\n // and send out events for changes\n\n // reconcile track publications, publish events only if metadata is already there\n // i.e. changes since the local participant has joined\n const validTracks = new Map<string, RemoteTrackPublication>();\n const newTracks = new Map<string, RemoteTrackPublication>();\n\n info.tracks.forEach((ti) => {\n let publication = this.getTrackPublication(ti.sid);\n if (!publication) {\n // new publication\n const kind = Track.kindFromProto(ti.type);\n if (!kind) {\n return;\n }\n publication = new RemoteTrackPublication(kind, ti.sid, ti.name);\n publication.updateInfo(ti);\n newTracks.set(ti.sid, publication);\n this.addTrackPublication(publication);\n } else {\n publication.updateInfo(ti);\n }\n validTracks.set(ti.sid, publication);\n });\n\n // send new tracks\n if (alreadyHasMetadata) {\n newTracks.forEach((publication) => {\n this.emit(ParticipantEvent.TrackPublished, publication);\n });\n }\n\n // detect removed tracks\n this.tracks.forEach((publication) => {\n if (!validTracks.has(publication.trackSid)) {\n this.unpublishTrack(publication.trackSid, true);\n }\n });\n }\n\n /** @internal */\n unpublishTrack(sid: Track.SID, sendUnpublish?: boolean) {\n const publication = <RemoteTrackPublication>this.tracks.get(sid);\n if (!publication) {\n return;\n }\n\n this.tracks.delete(sid);\n\n // remove from the right type map\n switch (publication.kind) {\n case Track.Kind.Audio:\n this.audioTracks.delete(sid);\n break;\n case Track.Kind.Video:\n this.videoTracks.delete(sid);\n break;\n default:\n break;\n }\n\n // also send unsubscribe, if track is actively subscribed\n const { track } = publication;\n if (track) {\n const { isSubscribed } = publication;\n track.stop();\n publication.setTrack(undefined);\n // always send unsubscribed, since apps may rely on this\n if (isSubscribed) {\n this.emit(ParticipantEvent.TrackUnsubscribed, track, publication);\n }\n }\n if (sendUnpublish) {\n this.emit(ParticipantEvent.TrackUnpublished, publication);\n }\n }\n\n /** @internal */\n emit<E extends keyof ParticipantEventCallbacks>(\n event: E,\n ...args: Parameters<ParticipantEventCallbacks[E]>\n ): boolean {\n log.trace('participant event', { participant: this.sid, event, args });\n return super.emit(event, ...args);\n }\n}\n","import log from '../../logger';\nimport { RoomOptions } from '../../options';\nimport { DataPacket, DataPacket_Kind, ParticipantPermission } from '../../proto/livekit_models';\nimport {\n AddTrackRequest,\n DataChannelInfo,\n SignalTarget,\n SubscribedQualityUpdate,\n TrackPublishedResponse,\n TrackUnpublishedResponse,\n} from '../../proto/livekit_rtc';\nimport { TrackInvalidError, UnexpectedConnectionState } from '../errors';\nimport { ParticipantEvent, TrackEvent } from '../events';\nimport RTCEngine from '../RTCEngine';\nimport LocalAudioTrack from '../track/LocalAudioTrack';\nimport LocalTrack from '../track/LocalTrack';\nimport LocalTrackPublication from '../track/LocalTrackPublication';\nimport LocalVideoTrack, { videoLayersFromEncodings } from '../track/LocalVideoTrack';\nimport {\n CreateLocalTracksOptions,\n ScreenShareCaptureOptions,\n ScreenSharePresets,\n TrackPublishOptions,\n VideoCodec,\n} from '../track/options';\nimport { Track } from '../track/Track';\nimport { constraintsForOptions, mergeDefaultOptions } from '../track/utils';\nimport { isFireFox } from '../utils';\nimport Participant from './Participant';\nimport { ParticipantTrackPermission, trackPermissionToProto } from './ParticipantTrackPermission';\nimport { computeVideoEncodings, mediaTrackToLocalTrack } from './publishUtils';\nimport RemoteParticipant from './RemoteParticipant';\n\nexport default class LocalParticipant extends Participant {\n audioTracks: Map<string, LocalTrackPublication>;\n\n videoTracks: Map<string, LocalTrackPublication>;\n\n /** map of track sid => all published tracks */\n tracks: Map<string, LocalTrackPublication>;\n\n private pendingPublishing = new Set<Track.Source>();\n\n private cameraError: Error | undefined;\n\n private microphoneError: Error | undefined;\n\n private engine: RTCEngine;\n\n // keep a pointer to room options\n private roomOptions?: RoomOptions;\n\n /** @internal */\n constructor(sid: string, identity: string, engine: RTCEngine, options: RoomOptions) {\n super(sid, identity);\n this.audioTracks = new Map();\n this.videoTracks = new Map();\n this.tracks = new Map();\n this.engine = engine;\n this.roomOptions = options;\n\n this.engine.client.onRemoteMuteChanged = (trackSid: string, muted: boolean) => {\n const pub = this.tracks.get(trackSid);\n if (!pub || !pub.track) {\n return;\n }\n if (muted) {\n pub.mute();\n } else {\n pub.unmute();\n }\n };\n\n this.engine.client.onSubscribedQualityUpdate = this.handleSubscribedQualityUpdate;\n\n this.engine.client.onLocalTrackUnpublished = this.handleLocalTrackUnpublished;\n }\n\n get lastCameraError(): Error | undefined {\n return this.cameraError;\n }\n\n get lastMicrophoneError(): Error | undefined {\n return this.microphoneError;\n }\n\n getTrack(source: Track.Source): LocalTrackPublication | undefined {\n const track = super.getTrack(source);\n if (track) {\n return track as LocalTrackPublication;\n }\n }\n\n getTrackByName(name: string): LocalTrackPublication | undefined {\n const track = super.getTrackByName(name);\n if (track) {\n return track as LocalTrackPublication;\n }\n }\n\n /**\n * Enable or disable a participant's camera track.\n *\n * If a track has already published, it'll mute or unmute the track.\n * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n */\n setCameraEnabled(enabled: boolean): Promise<LocalTrackPublication | undefined> {\n return this.setTrackEnabled(Track.Source.Camera, enabled);\n }\n\n /**\n * Enable or disable a participant's microphone track.\n *\n * If a track has already published, it'll mute or unmute the track.\n * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n */\n setMicrophoneEnabled(enabled: boolean): Promise<LocalTrackPublication | undefined> {\n return this.setTrackEnabled(Track.Source.Microphone, enabled);\n }\n\n /**\n * Start or stop sharing a participant's screen\n * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n */\n setScreenShareEnabled(enabled: boolean): Promise<LocalTrackPublication | undefined> {\n return this.setTrackEnabled(Track.Source.ScreenShare, enabled);\n }\n\n /** @internal */\n setPermissions(permissions: ParticipantPermission): boolean {\n const prevPermissions = this.permissions;\n const changed = super.setPermissions(permissions);\n if (changed && prevPermissions) {\n this.emit(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);\n }\n return changed;\n }\n\n /**\n * Enable or disable publishing for a track by source. This serves as a simple\n * way to manage the common tracks (camera, mic, or screen share).\n * Resolves with LocalTrackPublication if successful and void otherwise\n */\n private async setTrackEnabled(\n source: Track.Source,\n enabled: boolean,\n ): Promise<LocalTrackPublication | undefined> {\n log.debug('setTrackEnabled', { source, enabled });\n let track = this.getTrack(source);\n if (enabled) {\n if (track) {\n await track.unmute();\n } else {\n let localTrack: LocalTrack | undefined;\n if (this.pendingPublishing.has(source)) {\n log.info('skipping duplicate published source', { source });\n // no-op it's already been requested\n return;\n }\n this.pendingPublishing.add(source);\n try {\n switch (source) {\n case Track.Source.Camera:\n [localTrack] = await this.createTracks({\n video: true,\n });\n break;\n case Track.Source.Microphone:\n [localTrack] = await this.createTracks({\n audio: true,\n });\n break;\n case Track.Source.ScreenShare:\n [localTrack] = await this.createScreenTracks({ audio: false });\n break;\n default:\n throw new TrackInvalidError(source);\n }\n\n track = await this.publishTrack(localTrack);\n } catch (e) {\n if (e instanceof Error && !(e instanceof TrackInvalidError)) {\n this.emit(ParticipantEvent.MediaDevicesError, e);\n }\n throw e;\n } finally {\n this.pendingPublishing.delete(source);\n }\n }\n } else if (track && track.track) {\n // screenshare cannot be muted, unpublish instead\n if (source === Track.Source.ScreenShare) {\n track = this.unpublishTrack(track.track);\n } else {\n await track.mute();\n }\n }\n return track;\n }\n\n /**\n * Publish both camera and microphone at the same time. This is useful for\n * displaying a single Permission Dialog box to the end user.\n */\n async enableCameraAndMicrophone() {\n if (\n this.pendingPublishing.has(Track.Source.Camera) ||\n this.pendingPublishing.has(Track.Source.Microphone)\n ) {\n // no-op it's already been requested\n return;\n }\n\n this.pendingPublishing.add(Track.Source.Camera);\n this.pendingPublishing.add(Track.Source.Microphone);\n try {\n const tracks: LocalTrack[] = await this.createTracks({\n audio: true,\n video: true,\n });\n\n await Promise.all(tracks.map((track) => this.publishTrack(track)));\n } finally {\n this.pendingPublishing.delete(Track.Source.Camera);\n this.pendingPublishing.delete(Track.Source.Microphone);\n }\n }\n\n /**\n * Create local camera and/or microphone tracks\n * @param options\n * @returns\n */\n async createTracks(options?: CreateLocalTracksOptions): Promise<LocalTrack[]> {\n const opts = mergeDefaultOptions(\n options,\n this.roomOptions?.audioCaptureDefaults,\n this.roomOptions?.videoCaptureDefaults,\n );\n\n const constraints = constraintsForOptions(opts);\n let stream: MediaStream | undefined;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (err) {\n if (err instanceof Error) {\n if (constraints.audio) {\n this.microphoneError = err;\n }\n if (constraints.video) {\n this.cameraError = err;\n }\n }\n\n throw err;\n }\n\n if (constraints.audio) {\n this.microphoneError = undefined;\n }\n if (constraints.video) {\n this.cameraError = undefined;\n }\n\n return stream.getTracks().map((mediaStreamTrack) => {\n const isAudio = mediaStreamTrack.kind === 'audio';\n let trackOptions = isAudio ? options!.audio : options!.video;\n if (typeof trackOptions === 'boolean' || !trackOptions) {\n trackOptions = {};\n }\n let trackConstraints: MediaTrackConstraints | undefined;\n const conOrBool = isAudio ? constraints.audio : constraints.video;\n if (typeof conOrBool !== 'boolean') {\n trackConstraints = conOrBool;\n }\n const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);\n if (track.kind === Track.Kind.Video) {\n track.source = Track.Source.Camera;\n } else if (track.kind === Track.Kind.Audio) {\n track.source = Track.Source.Microphone;\n }\n track.mediaStream = stream;\n return track;\n });\n }\n\n /**\n * Creates a screen capture tracks with getDisplayMedia().\n * A LocalVideoTrack is always created and returned.\n * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n */\n async createScreenTracks(options?: ScreenShareCaptureOptions): Promise<Array<LocalTrack>> {\n if (options === undefined) {\n options = {};\n }\n if (options.resolution === undefined) {\n options.resolution = ScreenSharePresets.h1080fps15.resolution;\n }\n\n let videoConstraints: MediaTrackConstraints | boolean = true;\n if (options.resolution) {\n videoConstraints = {\n width: options.resolution.width,\n height: options.resolution.height,\n frameRate: options.resolution.frameRate,\n };\n }\n // typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232\n // @ts-ignore\n const stream: MediaStream = await navigator.mediaDevices.getDisplayMedia({\n audio: options.audio ?? false,\n video: videoConstraints,\n });\n\n const tracks = stream.getVideoTracks();\n if (tracks.length === 0) {\n throw new TrackInvalidError('no video track found');\n }\n const screenVideo = new LocalVideoTrack(tracks[0]);\n screenVideo.source = Track.Source.ScreenShare;\n const localTracks: Array<LocalTrack> = [screenVideo];\n if (stream.getAudioTracks().length > 0) {\n const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0]);\n screenAudio.source = Track.Source.ScreenShareAudio;\n localTracks.push(screenAudio);\n }\n return localTracks;\n }\n\n /**\n * Publish a new track to the room\n * @param track\n * @param options\n */\n async publishTrack(\n track: LocalTrack | MediaStreamTrack,\n options?: TrackPublishOptions,\n ): Promise<LocalTrackPublication> {\n const opts: TrackPublishOptions = {\n ...this.roomOptions?.publishDefaults,\n ...options,\n };\n\n // convert raw media track into audio or video track\n if (track instanceof MediaStreamTrack) {\n switch (track.kind) {\n case 'audio':\n track = new LocalAudioTrack(track);\n break;\n case 'video':\n track = new LocalVideoTrack(track);\n break;\n default:\n throw new TrackInvalidError(`unsupported MediaStreamTrack kind ${track.kind}`);\n }\n }\n\n // is it already published? if so skip\n let existingPublication: LocalTrackPublication | undefined;\n this.tracks.forEach((publication) => {\n if (!publication.track) {\n return;\n }\n if (publication.track === track) {\n existingPublication = <LocalTrackPublication>publication;\n }\n });\n\n if (existingPublication) return existingPublication;\n\n if (opts.source) {\n track.source = opts.source;\n }\n if (opts.stopMicTrackOnMute && track instanceof LocalAudioTrack) {\n track.stopOnMute = true;\n }\n\n if (track.source === Track.Source.ScreenShare && isFireFox()) {\n // Firefox does not work well with simulcasted screen share\n // we frequently get no data on layer 0 when enabled\n opts.simulcast = false;\n }\n\n // handle track actions\n track.on(TrackEvent.Muted, this.onTrackMuted);\n track.on(TrackEvent.Unmuted, this.onTrackUnmuted);\n track.on(TrackEvent.Ended, this.onTrackUnpublish);\n track.on(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n track.on(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n\n // create track publication from track\n const req = AddTrackRequest.fromPartial({\n // get local track id for use during publishing\n cid: track.mediaStreamTrack.id,\n name: options?.name,\n type: Track.kindToProto(track.kind),\n muted: track.isMuted,\n source: Track.sourceToProto(track.source),\n disableDtx: !(opts?.dtx ?? true),\n });\n\n // compute encodings and layers for video\n let encodings: RTCRtpEncodingParameters[] | undefined;\n if (track.kind === Track.Kind.Video) {\n // TODO: support react native, which doesn't expose getSettings\n const settings = track.mediaStreamTrack.getSettings();\n const width = settings.width ?? track.dimensions?.width;\n const height = settings.height ?? track.dimensions?.height;\n // width and height should be defined for video\n req.width = width ?? 0;\n req.height = height ?? 0;\n encodings = computeVideoEncodings(\n track.source === Track.Source.ScreenShare,\n width,\n height,\n opts,\n );\n req.layers = videoLayersFromEncodings(req.width, req.height, encodings);\n } else if (track.kind === Track.Kind.Audio && opts.audioBitrate) {\n encodings = [\n {\n maxBitrate: opts.audioBitrate,\n },\n ];\n }\n\n const ti = await this.engine.addTrack(req);\n const publication = new LocalTrackPublication(track.kind, ti, track);\n track.sid = ti.sid;\n\n if (!this.engine.publisher) {\n throw new UnexpectedConnectionState('publisher is closed');\n }\n log.debug(`publishing ${track.kind} with encodings`, { encodings, trackInfo: ti });\n const transceiverInit: RTCRtpTransceiverInit = { direction: 'sendonly' };\n if (encodings) {\n transceiverInit.sendEncodings = encodings;\n }\n const transceiver = this.engine.publisher.pc.addTransceiver(\n track.mediaStreamTrack,\n transceiverInit,\n );\n this.engine.negotiate();\n\n // store RTPSender\n track.sender = transceiver.sender;\n if (track instanceof LocalVideoTrack) {\n track.startMonitor(this.engine.client);\n } else if (track instanceof LocalAudioTrack) {\n track.startMonitor();\n }\n\n if (opts.videoCodec) {\n this.setPreferredCodec(transceiver, track.kind, opts.videoCodec);\n }\n this.addTrackPublication(publication);\n\n // send event for publication\n this.emit(ParticipantEvent.LocalTrackPublished, publication);\n return publication;\n }\n\n unpublishTrack(\n track: LocalTrack | MediaStreamTrack,\n stopOnUnpublish?: boolean,\n ): LocalTrackPublication | undefined {\n // look through all published tracks to find the right ones\n const publication = this.getPublicationForTrack(track);\n\n log.debug('unpublishing track', { track, method: 'unpublishTrack' });\n\n if (!publication || !publication.track) {\n log.warn('track was not unpublished because no publication was found', {\n track,\n method: 'unpublishTrack',\n });\n return undefined;\n }\n\n track = publication.track;\n\n track.off(TrackEvent.Muted, this.onTrackMuted);\n track.off(TrackEvent.Unmuted, this.onTrackUnmuted);\n track.off(TrackEvent.Ended, this.onTrackUnpublish);\n track.off(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n track.off(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n\n if (stopOnUnpublish === undefined) {\n stopOnUnpublish = this.roomOptions?.stopLocalTrackOnUnpublish ?? true;\n }\n if (stopOnUnpublish) {\n track.stop();\n }\n\n const { mediaStreamTrack } = track;\n\n if (this.engine.publisher) {\n const senders = this.engine.publisher.pc.getSenders();\n senders.forEach((sender) => {\n if (sender.track === mediaStreamTrack) {\n try {\n this.engine.publisher?.pc.removeTrack(sender);\n this.engine.negotiate();\n } catch (e) {\n log.warn('failed to remove track', { error: e, method: 'unpublishTrack' });\n }\n }\n });\n }\n\n // remove from our maps\n this.tracks.delete(publication.trackSid);\n switch (publication.kind) {\n case Track.Kind.Audio:\n this.audioTracks.delete(publication.trackSid);\n break;\n case Track.Kind.Video:\n this.videoTracks.delete(publication.trackSid);\n break;\n default:\n break;\n }\n\n this.emit(ParticipantEvent.LocalTrackUnpublished, publication);\n publication.setTrack(undefined);\n\n return publication;\n }\n\n unpublishTracks(tracks: LocalTrack[] | MediaStreamTrack[]): LocalTrackPublication[] {\n const publications: LocalTrackPublication[] = [];\n tracks.forEach((track: LocalTrack | MediaStreamTrack) => {\n const pub = this.unpublishTrack(track);\n if (pub) {\n publications.push(pub);\n }\n });\n return publications;\n }\n\n /**\n * Publish a new data payload to the room. Data will be forwarded to each\n * participant in the room if the destination argument is empty\n *\n * @param data Uint8Array of the payload. To send string data, use TextEncoder.encode\n * @param kind whether to send this as reliable or lossy.\n * For data that you need delivery guarantee (such as chat messages), use Reliable.\n * For data that should arrive as quickly as possible, but you are ok with dropped\n * packets, use Lossy.\n * @param destination the participants who will receive the message\n */\n async publishData(\n data: Uint8Array,\n kind: DataPacket_Kind,\n destination?: RemoteParticipant[] | string[],\n ) {\n const dest: string[] = [];\n if (destination !== undefined) {\n destination.forEach((val: any) => {\n if (val instanceof RemoteParticipant) {\n dest.push(val.sid);\n } else {\n dest.push(val);\n }\n });\n }\n\n const packet: DataPacket = {\n kind,\n user: {\n participantSid: this.sid,\n payload: data,\n destinationSids: dest,\n },\n };\n\n await this.engine.sendDataPacket(packet, kind);\n }\n\n /**\n * Control who can subscribe to LocalParticipant's published tracks.\n *\n * By default, all participants can subscribe. This allows fine-grained control over\n * who is able to subscribe at a participant and track level.\n *\n * Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and\n * [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks\n * will not grant permissions to any participants and will require a subsequent\n * permissions update to allow subscription.\n *\n * @param allParticipantsAllowed Allows all participants to subscribe all tracks.\n * Takes precedence over [[participantTrackPermissions]] if set to true.\n * By default this is set to true.\n * @param participantTrackPermissions Full list of individual permissions per\n * participant/track. Any omitted participants will not receive any permissions.\n */\n setTrackSubscriptionPermissions(\n allParticipantsAllowed: boolean,\n participantTrackPermissions: ParticipantTrackPermission[] = [],\n ) {\n this.engine.client.sendUpdateSubscriptionPermissions(\n allParticipantsAllowed,\n participantTrackPermissions.map((p) => trackPermissionToProto(p)),\n );\n }\n\n /** @internal */\n private onTrackUnmuted = (track: LocalTrack) => {\n this.onTrackMuted(track, track.isUpstreamPaused);\n };\n\n // when the local track changes in mute status, we'll notify server as such\n /** @internal */\n private onTrackMuted = (track: LocalTrack, muted?: boolean) => {\n if (muted === undefined) {\n muted = true;\n }\n\n if (!track.sid) {\n log.error('could not update mute status for unpublished track', track);\n return;\n }\n\n this.engine.updateMuteStatus(track.sid, muted);\n };\n\n private onTrackUpstreamPaused = (track: LocalTrack) => {\n log.debug('upstream paused');\n this.onTrackMuted(track, true);\n };\n\n private onTrackUpstreamResumed = (track: LocalTrack) => {\n log.debug('upstream resumed');\n this.onTrackMuted(track, track.isMuted);\n };\n\n private handleSubscribedQualityUpdate = (update: SubscribedQualityUpdate) => {\n if (!this.roomOptions?.dynacast) {\n return;\n }\n const pub = this.videoTracks.get(update.trackSid);\n if (!pub) {\n log.warn('received subscribed quality update for unknown track', {\n method: 'handleSubscribedQualityUpdate',\n sid: update.trackSid,\n });\n return;\n }\n pub.videoTrack?.setPublishingLayers(update.subscribedQualities);\n };\n\n private handleLocalTrackUnpublished = (unpublished: TrackUnpublishedResponse) => {\n const track = this.tracks.get(unpublished.trackSid);\n if (!track) {\n log.warn('received unpublished event for unknown track', {\n method: 'handleLocalTrackUnpublished',\n trackSid: unpublished.trackSid,\n });\n return;\n }\n this.unpublishTrack(track.track!);\n };\n\n private onTrackUnpublish = (track: LocalTrack) => {\n this.unpublishTrack(track);\n };\n\n private getPublicationForTrack(\n track: LocalTrack | MediaStreamTrack,\n ): LocalTrackPublication | undefined {\n let publication: LocalTrackPublication | undefined;\n this.tracks.forEach((pub) => {\n const localTrack = pub.track;\n if (!localTrack) {\n return;\n }\n\n // this looks overly complicated due to this object tree\n if (track instanceof MediaStreamTrack) {\n if (localTrack instanceof LocalAudioTrack || localTrack instanceof LocalVideoTrack) {\n if (localTrack.mediaStreamTrack === track) {\n publication = <LocalTrackPublication>pub;\n }\n }\n } else if (track === localTrack) {\n publication = <LocalTrackPublication>pub;\n }\n });\n return publication;\n }\n\n private setPreferredCodec(\n transceiver: RTCRtpTransceiver,\n kind: Track.Kind,\n videoCodec: VideoCodec,\n ) {\n if (!('getCapabilities' in RTCRtpSender)) {\n return;\n }\n const cap = RTCRtpSender.getCapabilities(kind);\n if (!cap) return;\n const selected = cap.codecs.find((c) => {\n const codec = c.mimeType.toLowerCase();\n const matchesVideoCodec = codec === `video/${videoCodec}`;\n\n // for h264 codecs that have sdpFmtpLine available, use only if the\n // profile-level-id is 42e01f for cross-browser compatibility\n if (videoCodec === 'h264' && c.sdpFmtpLine) {\n return matchesVideoCodec && c.sdpFmtpLine.includes('profile-level-id=42e01f');\n }\n\n return matchesVideoCodec || codec === 'audio/opus';\n });\n if (selected && 'setCodecPreferences' in transceiver) {\n // @ts-ignore\n transceiver.setCodecPreferences([selected]);\n }\n }\n\n /** @internal */\n publishedTracksInfo(): TrackPublishedResponse[] {\n const infos: TrackPublishedResponse[] = [];\n this.tracks.forEach((track: LocalTrackPublication) => {\n if (track.track !== undefined) {\n infos.push({\n cid: track.track.mediaStreamTrack.id,\n track: track.trackInfo,\n });\n }\n });\n return infos;\n }\n\n /** @internal */\n dataChannelsInfo(): DataChannelInfo[] {\n const infos: DataChannelInfo[] = [];\n const getInfo = (dc: RTCDataChannel | undefined, target: SignalTarget) => {\n if (dc?.id !== undefined && dc.id !== null) {\n infos.push({\n label: dc.label,\n id: dc.id,\n target,\n });\n }\n };\n getInfo(this.engine.dataChannelForKind(DataPacket_Kind.LOSSY), SignalTarget.PUBLISHER);\n getInfo(this.engine.dataChannelForKind(DataPacket_Kind.RELIABLE), SignalTarget.PUBLISHER);\n getInfo(this.engine.dataChannelForKind(DataPacket_Kind.LOSSY, true), SignalTarget.SUBSCRIBER);\n getInfo(\n this.engine.dataChannelForKind(DataPacket_Kind.RELIABLE, true),\n SignalTarget.SUBSCRIBER,\n );\n return infos;\n }\n}\n","import { TrackPermission } from '../../proto/livekit_rtc';\n\nexport interface ParticipantTrackPermission {\n /**\n * The participant identity this permission applies to.\n * You can either provide this or `participantSid`\n */\n participantIdentity?: string;\n\n /**\n * The participant server id this permission applies to.\n * You can either provide this or `participantIdentity`\n */\n participantSid?: string;\n\n /**\n * Grant permission to all all tracks. Takes precedence over allowedTrackSids.\n * false if unset.\n */\n allowAll?: boolean;\n\n /**\n * The list of track ids that the target participant can subscribe to.\n * When unset, it'll allow all tracks to be subscribed by the participant.\n * When empty, this participant is disallowed from subscribing to any tracks.\n */\n allowedTrackSids?: string[];\n}\n\nexport function trackPermissionToProto(perms: ParticipantTrackPermission): TrackPermission {\n if (!perms.participantSid && !perms.participantIdentity) {\n throw new Error(\n 'Invalid track permission, must provide at least one of participantIdentity and participantSid',\n );\n }\n return {\n participantIdentity: perms.participantIdentity ?? '',\n participantSid: perms.participantSid ?? '',\n allTracks: perms.allowAll ?? false,\n trackSids: perms.allowedTrackSids || [],\n };\n}\n","import log from '../logger';\n\nexport default class Queue {\n private queue: Array<() => void>;\n\n private running: boolean;\n\n constructor() {\n this.queue = [];\n this.running = false;\n }\n\n enqueue(cb: () => void) {\n log.trace('enqueuing request to fire later');\n this.queue.push(cb);\n }\n\n dequeue() {\n const evt = this.queue.shift();\n if (evt) evt();\n log.trace('firing request from queue');\n }\n\n async run() {\n if (this.running) return;\n log.trace('start queue');\n this.running = true;\n while (this.running && this.queue.length > 0) {\n this.dequeue();\n }\n this.running = false;\n log.trace('queue finished');\n }\n\n pause() {\n log.trace('pausing queue');\n this.running = false;\n }\n\n reset() {\n log.trace('resetting queue');\n this.running = false;\n this.queue = [];\n }\n\n isRunning() {\n return this.running;\n }\n\n isEmpty() {\n return this.queue.length === 0;\n }\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection &&\n !window.RTCIceGatherer)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n const initParameters = arguments[1];\n const shouldPerformCheck = initParameters &&\n 'sendEncodings' in initParameters;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n initParameters.sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = initParameters.sendEncodings;\n sender.sendEncodings = initParameters.sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substr(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nexport function shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nimport * as utils from './utils';\n\n // Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\nimport * as sdp from 'sdp';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\n","import log from '../logger';\nimport {\n ClientInfo,\n ParticipantInfo,\n Room,\n SpeakerInfo,\n VideoLayer,\n} from '../proto/livekit_models';\nimport {\n AddTrackRequest,\n ConnectionQualityUpdate,\n JoinResponse,\n LeaveRequest,\n SessionDescription,\n SignalRequest,\n SignalResponse,\n SignalTarget,\n SimulateScenario,\n StreamStateUpdate,\n SubscribedQualityUpdate,\n SubscriptionPermissionUpdate,\n SyncState,\n TrackPermission,\n TrackPublishedResponse,\n TrackUnpublishedResponse,\n UpdateSubscription,\n UpdateTrackSettings,\n} from '../proto/livekit_rtc';\nimport { ConnectionError } from '../room/errors';\nimport { getClientInfo, sleep } from '../room/utils';\nimport Queue from './RequestQueue';\nimport 'webrtc-adapter';\n\n// internal options\ninterface ConnectOpts {\n autoSubscribe?: boolean;\n /** internal */\n reconnect?: boolean;\n\n publishOnly?: string;\n\n adaptiveStream?: boolean;\n}\n\n// public options\nexport interface SignalOptions {\n autoSubscribe?: boolean;\n publishOnly?: string;\n adaptiveStream?: boolean;\n}\n\nconst passThroughQueueSignals: Array<keyof SignalRequest> = [\n 'syncState',\n 'trickle',\n 'offer',\n 'answer',\n 'simulate',\n 'leave',\n];\n\nfunction canPassThroughQueue(req: SignalRequest): boolean {\n const canPass =\n Object.keys(req).find((key) => passThroughQueueSignals.includes(key as keyof SignalRequest)) !==\n undefined;\n log.trace('request allowed to bypass queue:', { canPass, req });\n return canPass;\n}\n\n/** @internal */\nexport class SignalClient {\n isConnected: boolean;\n\n isReconnecting: boolean;\n\n requestQueue: Queue;\n\n useJSON: boolean;\n\n /** simulate signaling latency by delaying messages */\n signalLatency?: number;\n\n onClose?: (reason: string) => void;\n\n onAnswer?: (sd: RTCSessionDescriptionInit) => void;\n\n onOffer?: (sd: RTCSessionDescriptionInit) => void;\n\n // when a new ICE candidate is made available\n onTrickle?: (sd: RTCIceCandidateInit, target: SignalTarget) => void;\n\n onParticipantUpdate?: (updates: ParticipantInfo[]) => void;\n\n onLocalTrackPublished?: (res: TrackPublishedResponse) => void;\n\n onNegotiateRequested?: () => void;\n\n onSpeakersChanged?: (res: SpeakerInfo[]) => void;\n\n onRemoteMuteChanged?: (trackSid: string, muted: boolean) => void;\n\n onRoomUpdate?: (room: Room) => void;\n\n onConnectionQuality?: (update: ConnectionQualityUpdate) => void;\n\n onStreamStateUpdate?: (update: StreamStateUpdate) => void;\n\n onSubscribedQualityUpdate?: (update: SubscribedQualityUpdate) => void;\n\n onSubscriptionPermissionUpdate?: (update: SubscriptionPermissionUpdate) => void;\n\n onLocalTrackUnpublished?: (res: TrackUnpublishedResponse) => void;\n\n onTokenRefresh?: (token: string) => void;\n\n onLeave?: (leave: LeaveRequest) => void;\n\n ws?: WebSocket;\n\n constructor(useJSON: boolean = false) {\n this.isConnected = false;\n this.isReconnecting = false;\n this.useJSON = useJSON;\n this.requestQueue = new Queue();\n }\n\n async join(url: string, token: string, opts?: SignalOptions): Promise<JoinResponse> {\n // during a full reconnect, we'd want to start the sequence even if currently\n // connected\n this.isConnected = false;\n const res = await this.connect(url, token, {\n autoSubscribe: opts?.autoSubscribe,\n publishOnly: opts?.publishOnly,\n adaptiveStream: opts?.adaptiveStream,\n });\n return res as JoinResponse;\n }\n\n async reconnect(url: string, token: string): Promise<void> {\n this.isReconnecting = true;\n await this.connect(url, token, {\n reconnect: true,\n });\n }\n\n connect(url: string, token: string, opts: ConnectOpts): Promise<JoinResponse | void> {\n if (url.startsWith('http')) {\n url = url.replace('http', 'ws');\n }\n // strip trailing slash\n url = url.replace(/\\/$/, '');\n url += '/rtc';\n\n const clientInfo = getClientInfo();\n const params = createConnectionParams(token, clientInfo, opts);\n\n return new Promise<JoinResponse | void>((resolve, reject) => {\n log.debug(`connecting to ${url + params}`);\n this.ws = undefined;\n const ws = new WebSocket(url + params);\n ws.binaryType = 'arraybuffer';\n\n ws.onerror = async (ev: Event) => {\n if (!this.ws) {\n try {\n const resp = await fetch(`http${url.substring(2)}/validate${params}`);\n if (!resp.ok) {\n const msg = await resp.text();\n reject(new ConnectionError(msg));\n } else {\n reject(new ConnectionError('Internal error'));\n }\n } catch (e) {\n reject(new ConnectionError('server was not reachable'));\n }\n return;\n }\n // other errors, handle\n this.handleWSError(ev);\n };\n\n ws.onopen = () => {\n this.ws = ws;\n if (opts.reconnect) {\n // upon reconnection, there will not be additional handshake\n this.isConnected = true;\n resolve();\n }\n };\n\n ws.onmessage = async (ev: MessageEvent) => {\n // not considered connected until JoinResponse is received\n let msg: SignalResponse;\n if (typeof ev.data === 'string') {\n const json = JSON.parse(ev.data);\n msg = SignalResponse.fromJSON(json);\n } else if (ev.data instanceof ArrayBuffer) {\n msg = SignalResponse.decode(new Uint8Array(ev.data));\n } else {\n log.error(`could not decode websocket message: ${typeof ev.data}`);\n return;\n }\n\n if (!this.isConnected) {\n // handle join message only\n if (msg.join) {\n this.isConnected = true;\n resolve(msg.join);\n } else {\n reject(new ConnectionError('did not receive join response'));\n }\n return;\n }\n\n if (this.signalLatency) {\n await sleep(this.signalLatency);\n }\n this.handleSignalResponse(msg);\n };\n\n ws.onclose = (ev: CloseEvent) => {\n if (!this.isConnected || this.ws !== ws) return;\n\n log.debug(`websocket connection closed: ${ev.reason}`);\n this.isConnected = false;\n if (this.onClose) this.onClose(ev.reason);\n if (this.ws === ws) {\n this.ws = undefined;\n }\n };\n });\n }\n\n close() {\n this.isConnected = false;\n if (this.ws) this.ws.onclose = null;\n this.ws?.close();\n this.ws = undefined;\n }\n\n // initial offer after joining\n sendOffer(offer: RTCSessionDescriptionInit) {\n log.debug('sending offer', offer);\n this.sendRequest({\n offer: toProtoSessionDescription(offer),\n });\n }\n\n // answer a server-initiated offer\n sendAnswer(answer: RTCSessionDescriptionInit) {\n log.debug('sending answer');\n this.sendRequest({\n answer: toProtoSessionDescription(answer),\n });\n }\n\n sendIceCandidate(candidate: RTCIceCandidateInit, target: SignalTarget) {\n log.trace('sending ice candidate', candidate);\n this.sendRequest({\n trickle: {\n candidateInit: JSON.stringify(candidate),\n target,\n },\n });\n }\n\n sendMuteTrack(trackSid: string, muted: boolean) {\n this.sendRequest({\n mute: {\n sid: trackSid,\n muted,\n },\n });\n }\n\n sendAddTrack(req: AddTrackRequest): void {\n this.sendRequest({\n addTrack: AddTrackRequest.fromPartial(req),\n });\n }\n\n sendUpdateTrackSettings(settings: UpdateTrackSettings) {\n this.sendRequest({ trackSetting: settings });\n }\n\n sendUpdateSubscription(sub: UpdateSubscription) {\n this.sendRequest({ subscription: sub });\n }\n\n sendSyncState(sync: SyncState) {\n this.sendRequest({ syncState: sync });\n }\n\n sendUpdateVideoLayers(trackSid: string, layers: VideoLayer[]) {\n this.sendRequest({\n updateLayers: {\n trackSid,\n layers,\n },\n });\n }\n\n sendUpdateSubscriptionPermissions(allParticipants: boolean, trackPermissions: TrackPermission[]) {\n this.sendRequest({\n subscriptionPermission: {\n allParticipants,\n trackPermissions,\n },\n });\n }\n\n sendSimulateScenario(scenario: SimulateScenario) {\n this.sendRequest({\n simulate: scenario,\n });\n }\n\n sendLeave() {\n this.sendRequest(SignalRequest.fromPartial({ leave: {} }));\n }\n\n async sendRequest(req: SignalRequest, fromQueue: boolean = false) {\n // capture all requests while reconnecting and put them in a queue.\n // keep order by queueing up new events as long as the queue is not empty\n // unless the request originates from the queue, then don't enqueue again\n const canQueue = !fromQueue && !canPassThroughQueue(req);\n if (canQueue && (this.isReconnecting || !this.requestQueue.isEmpty())) {\n this.requestQueue.enqueue(() => this.sendRequest(req, true));\n return;\n }\n if (this.signalLatency) {\n await sleep(this.signalLatency);\n }\n if (!this.ws) {\n log.error('cannot send signal request before connected');\n return;\n }\n\n try {\n if (this.useJSON) {\n this.ws.send(JSON.stringify(SignalRequest.toJSON(req)));\n } else {\n this.ws.send(SignalRequest.encode(req).finish());\n }\n } catch (e) {\n log.error('error sending signal message', { error: e });\n }\n }\n\n private handleSignalResponse(msg: SignalResponse) {\n if (msg.answer) {\n const sd = fromProtoSessionDescription(msg.answer);\n if (this.onAnswer) {\n this.onAnswer(sd);\n }\n } else if (msg.offer) {\n const sd = fromProtoSessionDescription(msg.offer);\n if (this.onOffer) {\n this.onOffer(sd);\n }\n } else if (msg.trickle) {\n const candidate: RTCIceCandidateInit = JSON.parse(msg.trickle.candidateInit);\n if (this.onTrickle) {\n this.onTrickle(candidate, msg.trickle.target);\n }\n } else if (msg.update) {\n if (this.onParticipantUpdate) {\n this.onParticipantUpdate(msg.update.participants);\n }\n } else if (msg.trackPublished) {\n if (this.onLocalTrackPublished) {\n this.onLocalTrackPublished(msg.trackPublished);\n }\n } else if (msg.speakersChanged) {\n if (this.onSpeakersChanged) {\n this.onSpeakersChanged(msg.speakersChanged.speakers);\n }\n } else if (msg.leave) {\n if (this.onLeave) {\n this.onLeave(msg.leave);\n }\n } else if (msg.mute) {\n if (this.onRemoteMuteChanged) {\n this.onRemoteMuteChanged(msg.mute.sid, msg.mute.muted);\n }\n } else if (msg.roomUpdate) {\n if (this.onRoomUpdate) {\n this.onRoomUpdate(msg.roomUpdate.room!);\n }\n } else if (msg.connectionQuality) {\n if (this.onConnectionQuality) {\n this.onConnectionQuality(msg.connectionQuality);\n }\n } else if (msg.streamStateUpdate) {\n if (this.onStreamStateUpdate) {\n this.onStreamStateUpdate(msg.streamStateUpdate);\n }\n } else if (msg.subscribedQualityUpdate) {\n if (this.onSubscribedQualityUpdate) {\n this.onSubscribedQualityUpdate(msg.subscribedQualityUpdate);\n }\n } else if (msg.subscriptionPermissionUpdate) {\n if (this.onSubscriptionPermissionUpdate) {\n this.onSubscriptionPermissionUpdate(msg.subscriptionPermissionUpdate);\n }\n } else if (msg.refreshToken) {\n if (this.onTokenRefresh) {\n this.onTokenRefresh(msg.refreshToken);\n }\n } else if (msg.trackUnpublished) {\n if (this.onLocalTrackUnpublished) {\n this.onLocalTrackUnpublished(msg.trackUnpublished);\n }\n } else {\n log.debug('unsupported message', msg);\n }\n }\n\n setReconnected() {\n this.isReconnecting = false;\n this.requestQueue.run();\n }\n\n private handleWSError(ev: Event) {\n log.error('websocket error', ev);\n }\n}\n\nfunction fromProtoSessionDescription(sd: SessionDescription): RTCSessionDescriptionInit {\n const rsd: RTCSessionDescriptionInit = {\n type: 'offer',\n sdp: sd.sdp,\n };\n switch (sd.type) {\n case 'answer':\n case 'offer':\n case 'pranswer':\n case 'rollback':\n rsd.type = sd.type;\n break;\n default:\n break;\n }\n return rsd;\n}\n\nexport function toProtoSessionDescription(\n rsd: RTCSessionDescription | RTCSessionDescriptionInit,\n): SessionDescription {\n const sd: SessionDescription = {\n sdp: rsd.sdp!,\n type: rsd.type!,\n };\n return sd;\n}\n\nfunction createConnectionParams(token: string, info: ClientInfo, opts?: ConnectOpts): string {\n const params = new URLSearchParams();\n params.set('access_token', token);\n\n // opts\n if (opts?.reconnect) {\n params.set('reconnect', '1');\n }\n if (opts?.autoSubscribe !== undefined) {\n params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');\n }\n\n // ClientInfo\n params.set('sdk', 'js');\n params.set('version', info.version);\n params.set('protocol', info.protocol.toString());\n if (info.deviceModel) {\n params.set('device_model', info.deviceModel);\n }\n if (info.os) {\n params.set('os', info.os);\n }\n if (info.osVersion) {\n params.set('os_version', info.osVersion);\n }\n if (info.browser) {\n params.set('browser', info.browser);\n }\n if (info.browserVersion) {\n params.set('browser_version', info.browserVersion);\n }\n\n if (opts?.publishOnly !== undefined) {\n params.set('publish', opts.publishOnly);\n }\n\n if (opts?.adaptiveStream) {\n params.set('adaptive_stream', '1');\n }\n\n return `?${params.toString()}`;\n}\n","import { debounce } from 'ts-debounce';\nimport log from '../logger';\n\n/** @internal */\nexport default class PCTransport {\n pc: RTCPeerConnection;\n\n pendingCandidates: RTCIceCandidateInit[] = [];\n\n restartingIce: boolean = false;\n\n renegotiate: boolean = false;\n\n onOffer?: (offer: RTCSessionDescriptionInit) => void;\n\n constructor(config?: RTCConfiguration) {\n this.pc = new RTCPeerConnection(config);\n }\n\n get isICEConnected(): boolean {\n return this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';\n }\n\n async addIceCandidate(candidate: RTCIceCandidateInit): Promise<void> {\n if (this.pc.remoteDescription && !this.restartingIce) {\n return this.pc.addIceCandidate(candidate);\n }\n this.pendingCandidates.push(candidate);\n }\n\n async setRemoteDescription(sd: RTCSessionDescriptionInit): Promise<void> {\n await this.pc.setRemoteDescription(sd);\n\n this.pendingCandidates.forEach((candidate) => {\n this.pc.addIceCandidate(candidate);\n });\n this.pendingCandidates = [];\n this.restartingIce = false;\n\n if (this.renegotiate) {\n this.renegotiate = false;\n this.createAndSendOffer();\n }\n }\n\n // debounced negotiate interface\n negotiate = debounce(() => {\n this.createAndSendOffer();\n }, 100);\n\n async createAndSendOffer(options?: RTCOfferOptions) {\n if (this.onOffer === undefined) {\n return;\n }\n\n if (options?.iceRestart) {\n log.debug('restarting ICE');\n this.restartingIce = true;\n }\n\n if (this.pc.signalingState === 'have-local-offer') {\n // we're waiting for the peer to accept our offer, so we'll just wait\n // the only exception to this is when ICE restart is needed\n const currentSD = this.pc.remoteDescription;\n if (options?.iceRestart && currentSD) {\n // TODO: handle when ICE restart is needed but we don't have a remote description\n // the best thing to do is to recreate the peerconnection\n await this.pc.setRemoteDescription(currentSD);\n } else {\n this.renegotiate = true;\n return;\n }\n } else if (this.pc.signalingState === 'closed') {\n log.warn('could not createOffer with closed peer connection');\n return;\n }\n\n // actually negotiate\n log.debug('starting to negotiate');\n const offer = await this.pc.createOffer(options);\n await this.pc.setLocalDescription(offer);\n this.onOffer(offer);\n }\n\n close() {\n this.pc.close();\n }\n}\n","import { EventEmitter } from 'events';\nimport type TypedEventEmitter from 'typed-emitter';\nimport { SignalClient, SignalOptions } from '../api/SignalClient';\nimport log from '../logger';\nimport {\n ClientConfigSetting,\n ClientConfiguration,\n DataPacket,\n DataPacket_Kind,\n SpeakerInfo,\n TrackInfo,\n UserPacket,\n} from '../proto/livekit_models';\nimport {\n AddTrackRequest,\n JoinResponse,\n LeaveRequest,\n SignalTarget,\n TrackPublishedResponse,\n} from '../proto/livekit_rtc';\nimport { ConnectionError, TrackInvalidError, UnexpectedConnectionState } from './errors';\nimport { EngineEvent } from './events';\nimport PCTransport from './PCTransport';\nimport { isFireFox, isWeb, sleep } from './utils';\n\nconst lossyDataChannel = '_lossy';\nconst reliableDataChannel = '_reliable';\nconst maxReconnectRetries = 10;\nconst minReconnectWait = 2 * 1000;\nconst maxReconnectDuration = 60 * 1000;\nexport const maxICEConnectTimeout = 15 * 1000;\n\nenum PCState {\n New,\n Connected,\n Disconnected,\n Reconnecting,\n Closed,\n}\n\n/** @internal */\nexport default class RTCEngine extends (EventEmitter as new () => TypedEventEmitter<EngineEventCallbacks>) {\n publisher?: PCTransport;\n\n subscriber?: PCTransport;\n\n client: SignalClient;\n\n rtcConfig: RTCConfiguration = {};\n\n private lossyDC?: RTCDataChannel;\n\n // @ts-ignore noUnusedLocals\n private lossyDCSub?: RTCDataChannel;\n\n private reliableDC?: RTCDataChannel;\n\n // @ts-ignore noUnusedLocals\n private reliableDCSub?: RTCDataChannel;\n\n private subscriberPrimary: boolean = false;\n\n private primaryPC?: RTCPeerConnection;\n\n private pcState: PCState = PCState.New;\n\n private isClosed: boolean = true;\n\n private pendingTrackResolvers: { [key: string]: (info: TrackInfo) => void } = {};\n\n // true if publisher connection has already been established.\n // this is helpful to know if we need to restart ICE on the publisher connection\n private hasPublished: boolean = false;\n\n // keep join info around for reconnect\n private url?: string;\n\n private token?: string;\n\n private signalOpts?: SignalOptions;\n\n private reconnectAttempts: number = 0;\n\n private reconnectStart: number = 0;\n\n private fullReconnectOnNext: boolean = false;\n\n private clientConfiguration?: ClientConfiguration;\n\n private connectedServerAddr?: string;\n\n constructor() {\n super();\n this.client = new SignalClient();\n }\n\n async join(url: string, token: string, opts?: SignalOptions): Promise<JoinResponse> {\n this.url = url;\n this.token = token;\n this.signalOpts = opts;\n\n const joinResponse = await this.client.join(url, token, opts);\n this.isClosed = false;\n\n this.subscriberPrimary = joinResponse.subscriberPrimary;\n if (!this.publisher) {\n this.configure(joinResponse);\n }\n\n // create offer\n if (!this.subscriberPrimary) {\n this.negotiate();\n }\n this.clientConfiguration = joinResponse.clientConfiguration;\n\n return joinResponse;\n }\n\n close() {\n this.isClosed = true;\n\n this.removeAllListeners();\n if (this.publisher && this.publisher.pc.signalingState !== 'closed') {\n this.publisher.pc.getSenders().forEach((sender) => {\n try {\n // TODO: react-native-webrtc doesn't have removeTrack yet.\n if (this.publisher?.pc.removeTrack) {\n this.publisher?.pc.removeTrack(sender);\n }\n } catch (e) {\n log.warn('could not removeTrack', { error: e });\n }\n });\n this.publisher.close();\n this.publisher = undefined;\n }\n if (this.subscriber) {\n this.subscriber.close();\n this.subscriber = undefined;\n }\n this.client.close();\n }\n\n addTrack(req: AddTrackRequest): Promise<TrackInfo> {\n if (this.pendingTrackResolvers[req.cid]) {\n throw new TrackInvalidError('a track with the same ID has already been published');\n }\n return new Promise<TrackInfo>((resolve) => {\n this.pendingTrackResolvers[req.cid] = resolve;\n this.client.sendAddTrack(req);\n });\n }\n\n updateMuteStatus(trackSid: string, muted: boolean) {\n this.client.sendMuteTrack(trackSid, muted);\n }\n\n get dataSubscriberReadyState(): string | undefined {\n return this.reliableDCSub?.readyState;\n }\n\n get connectedServerAddress(): string | undefined {\n return this.connectedServerAddr;\n }\n\n private configure(joinResponse: JoinResponse) {\n // already configured\n if (this.publisher || this.subscriber) {\n return;\n }\n\n // update ICE servers before creating PeerConnection\n if (joinResponse.iceServers && !this.rtcConfig.iceServers) {\n const rtcIceServers: RTCIceServer[] = [];\n joinResponse.iceServers.forEach((iceServer) => {\n const rtcIceServer: RTCIceServer = {\n urls: iceServer.urls,\n };\n if (iceServer.username) rtcIceServer.username = iceServer.username;\n if (iceServer.credential) {\n rtcIceServer.credential = iceServer.credential;\n }\n rtcIceServers.push(rtcIceServer);\n });\n this.rtcConfig.iceServers = rtcIceServers;\n }\n\n // @ts-ignore\n this.rtcConfig.sdpSemantics = 'unified-plan';\n // @ts-ignore\n this.rtcConfig.continualGatheringPolicy = 'gather_continually';\n\n this.publisher = new PCTransport(this.rtcConfig);\n this.subscriber = new PCTransport(this.rtcConfig);\n\n this.emit(EngineEvent.TransportsCreated, this.publisher, this.subscriber);\n\n this.publisher.pc.onicecandidate = (ev) => {\n if (!ev.candidate) return;\n log.trace('adding ICE candidate for peer', ev.candidate);\n this.client.sendIceCandidate(ev.candidate, SignalTarget.PUBLISHER);\n };\n\n this.subscriber.pc.onicecandidate = (ev) => {\n if (!ev.candidate) return;\n this.client.sendIceCandidate(ev.candidate, SignalTarget.SUBSCRIBER);\n };\n\n this.publisher.onOffer = (offer) => {\n this.client.sendOffer(offer);\n };\n\n let primaryPC = this.publisher.pc;\n let secondaryPC = this.subscriber.pc;\n if (joinResponse.subscriberPrimary) {\n primaryPC = this.subscriber.pc;\n secondaryPC = this.publisher.pc;\n // in subscriber primary mode, server side opens sub data channels.\n this.subscriber.pc.ondatachannel = this.handleDataChannel;\n }\n this.primaryPC = primaryPC;\n primaryPC.onconnectionstatechange = async () => {\n log.trace('connection state changed', {\n state: primaryPC.connectionState,\n });\n if (primaryPC.connectionState === 'connected') {\n try {\n this.connectedServerAddr = await getConnectedAddress(primaryPC);\n } catch (e) {\n log.warn('could not get connected server address', { error: e });\n }\n const shouldEmit = this.pcState === PCState.New;\n this.pcState = PCState.Connected;\n if (shouldEmit) {\n this.emit(EngineEvent.Connected);\n }\n } else if (primaryPC.connectionState === 'failed') {\n // on Safari, PeerConnection will switch to 'disconnected' during renegotiation\n if (this.pcState === PCState.Connected) {\n this.pcState = PCState.Disconnected;\n\n this.handleDisconnect('primary peerconnection');\n }\n }\n };\n secondaryPC.onconnectionstatechange = async () => {\n // also reconnect if secondary peerconnection fails\n if (secondaryPC.connectionState === 'failed') {\n this.handleDisconnect('secondary peerconnection');\n }\n };\n\n if (isWeb()) {\n this.subscriber.pc.ontrack = (ev: RTCTrackEvent) => {\n this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);\n };\n } else {\n // TODO: react-native-webrtc doesn't have ontrack yet, replace when ready.\n // @ts-ignore\n this.subscriber.pc.onaddstream = (ev: { stream: MediaStream }) => {\n const track = ev.stream.getTracks()[0];\n this.emit(EngineEvent.MediaTrackAdded, track, ev.stream);\n };\n }\n // data channels\n this.lossyDC = this.publisher.pc.createDataChannel(lossyDataChannel, {\n // will drop older packets that arrive\n ordered: true,\n maxRetransmits: 0,\n });\n this.reliableDC = this.publisher.pc.createDataChannel(reliableDataChannel, {\n ordered: true,\n });\n\n // also handle messages over the pub channel, for backwards compatibility\n this.lossyDC.onmessage = this.handleDataMessage;\n this.reliableDC.onmessage = this.handleDataMessage;\n\n // handle datachannel errors\n this.lossyDC.onerror = this.handleDataError;\n this.reliableDC.onerror = this.handleDataError;\n\n // configure signaling client\n this.client.onAnswer = async (sd) => {\n if (!this.publisher) {\n return;\n }\n log.debug('received server answer', {\n RTCSdpType: sd.type,\n signalingState: this.publisher.pc.signalingState,\n });\n await this.publisher.setRemoteDescription(sd);\n };\n\n // add candidate on trickle\n this.client.onTrickle = (candidate, target) => {\n if (!this.publisher || !this.subscriber) {\n return;\n }\n log.trace('got ICE candidate from peer', { candidate, target });\n if (target === SignalTarget.PUBLISHER) {\n this.publisher.addIceCandidate(candidate);\n } else {\n this.subscriber.addIceCandidate(candidate);\n }\n };\n\n // when server creates an offer for the client\n this.client.onOffer = async (sd) => {\n if (!this.subscriber) {\n return;\n }\n log.debug('received server offer', {\n RTCSdpType: sd.type,\n signalingState: this.subscriber.pc.signalingState,\n });\n await this.subscriber.setRemoteDescription(sd);\n\n // answer the offer\n const answer = await this.subscriber.pc.createAnswer();\n await this.subscriber.pc.setLocalDescription(answer);\n this.client.sendAnswer(answer);\n };\n\n this.client.onLocalTrackPublished = (res: TrackPublishedResponse) => {\n log.debug('received trackPublishedResponse', res);\n const resolve = this.pendingTrackResolvers[res.cid];\n if (!resolve) {\n log.error(`missing track resolver for ${res.cid}`);\n return;\n }\n delete this.pendingTrackResolvers[res.cid];\n resolve(res.track!);\n };\n\n this.client.onTokenRefresh = (token: string) => {\n this.token = token;\n };\n\n this.client.onClose = () => {\n this.handleDisconnect('signal');\n };\n\n this.client.onLeave = (leave?: LeaveRequest) => {\n if (leave?.canReconnect) {\n this.fullReconnectOnNext = true;\n this.primaryPC = undefined;\n } else {\n this.emit(EngineEvent.Disconnected);\n this.close();\n }\n };\n }\n\n private handleDataChannel = async ({ channel }: RTCDataChannelEvent) => {\n if (!channel) {\n return;\n }\n if (channel.label === reliableDataChannel) {\n this.reliableDCSub = channel;\n } else if (channel.label === lossyDataChannel) {\n this.lossyDCSub = channel;\n } else {\n return;\n }\n log.debug(`on data channel ${channel.id}, ${channel.label}`);\n channel.onmessage = this.handleDataMessage;\n };\n\n private handleDataMessage = async (message: MessageEvent) => {\n // decode\n let buffer: ArrayBuffer | undefined;\n if (message.data instanceof ArrayBuffer) {\n buffer = message.data;\n } else if (message.data instanceof Blob) {\n buffer = await message.data.arrayBuffer();\n } else {\n log.error('unsupported data type', message.data);\n return;\n }\n const dp = DataPacket.decode(new Uint8Array(buffer));\n if (dp.speaker) {\n // dispatch speaker updates\n this.emit(EngineEvent.ActiveSpeakersUpdate, dp.speaker.speakers);\n } else if (dp.user) {\n this.emit(EngineEvent.DataPacketReceived, dp.user, dp.kind);\n }\n };\n\n private handleDataError = (event: Event) => {\n const channel = event.currentTarget as RTCDataChannel;\n const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';\n\n if (event instanceof ErrorEvent) {\n const { error } = event.error;\n log.error(`DataChannel error on ${channelKind}: ${event.message}`, error);\n } else {\n log.error(`Unknown DataChannel Error on ${channelKind}`, event);\n }\n };\n\n // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection\n // continues to work, we can reconnect to websocket to continue the session\n // after a number of retries, we'll close and give up permanently\n private handleDisconnect = (connection: string) => {\n if (this.isClosed) {\n return;\n }\n log.debug(`${connection} disconnected`);\n if (this.reconnectAttempts === 0) {\n // only reset start time on the first try\n this.reconnectStart = Date.now();\n }\n\n const delay = this.reconnectAttempts * this.reconnectAttempts * 300;\n setTimeout(async () => {\n if (this.isClosed) {\n return;\n }\n if (\n isFireFox() || // TODO remove once clientConfiguration handles firefox case server side\n this.clientConfiguration?.resumeConnection === ClientConfigSetting.DISABLED\n ) {\n this.fullReconnectOnNext = true;\n }\n\n try {\n if (this.fullReconnectOnNext) {\n await this.restartConnection();\n } else {\n await this.resumeConnection();\n }\n this.reconnectAttempts = 0;\n this.fullReconnectOnNext = false;\n } catch (e) {\n this.reconnectAttempts += 1;\n let recoverable = true;\n if (e instanceof UnexpectedConnectionState) {\n log.debug('received unrecoverable error', { error: e });\n // unrecoverable\n recoverable = false;\n } else if (!(e instanceof SignalReconnectError)) {\n // cannot resume\n this.fullReconnectOnNext = true;\n }\n\n const duration = Date.now() - this.reconnectStart;\n if (this.reconnectAttempts >= maxReconnectRetries || duration > maxReconnectDuration) {\n recoverable = false;\n }\n\n if (recoverable) {\n this.handleDisconnect('reconnect');\n } else {\n log.info(\n `could not recover connection after ${maxReconnectRetries} attempts, ${duration}ms. giving up`,\n );\n this.emit(EngineEvent.Disconnected);\n this.close();\n }\n }\n }, delay);\n };\n\n private async restartConnection() {\n if (!this.url || !this.token) {\n // permanent failure, don't attempt reconnection\n throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n }\n\n log.info(`reconnecting, attempt: ${this.reconnectAttempts}`);\n if (this.reconnectAttempts === 0) {\n this.emit(EngineEvent.Restarting);\n }\n\n this.primaryPC = undefined;\n this.publisher?.close();\n this.publisher = undefined;\n this.subscriber?.close();\n this.subscriber = undefined;\n\n let joinResponse: JoinResponse;\n try {\n joinResponse = await this.join(this.url, this.token, this.signalOpts);\n } catch (e) {\n throw new SignalReconnectError();\n }\n\n await this.waitForPCConnected();\n this.client.setReconnected();\n\n // reconnect success\n this.emit(EngineEvent.Restarted, joinResponse);\n }\n\n private async resumeConnection(): Promise<void> {\n if (!this.url || !this.token) {\n // permanent failure, don't attempt reconnection\n throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n }\n // trigger publisher reconnect\n if (!this.publisher || !this.subscriber) {\n throw new UnexpectedConnectionState('publisher and subscriber connections unset');\n }\n log.info(`resuming signal connection, attempt ${this.reconnectAttempts}`);\n if (this.reconnectAttempts === 0) {\n this.emit(EngineEvent.Resuming);\n }\n\n try {\n await this.client.reconnect(this.url, this.token);\n } catch (e) {\n throw new SignalReconnectError();\n }\n this.emit(EngineEvent.SignalResumed);\n\n this.subscriber.restartingIce = true;\n\n // only restart publisher if it's needed\n if (this.hasPublished) {\n await this.publisher.createAndSendOffer({ iceRestart: true });\n }\n\n await this.waitForPCConnected();\n this.client.setReconnected();\n\n // resume success\n this.emit(EngineEvent.Resumed);\n }\n\n async waitForPCConnected() {\n const startTime = Date.now();\n let now = startTime;\n this.pcState = PCState.Reconnecting;\n\n log.debug('waiting for peer connection to reconnect');\n while (now - startTime < maxICEConnectTimeout) {\n if (this.primaryPC === undefined) {\n // we can abort early, connection is hosed\n break;\n } else if (\n // on Safari, we don't get a connectionstatechanged event during ICE restart\n // this means we'd have to check its status manually and update address\n // manually\n now - startTime > minReconnectWait &&\n this.primaryPC?.connectionState === 'connected'\n ) {\n this.pcState = PCState.Connected;\n try {\n this.connectedServerAddr = await getConnectedAddress(this.primaryPC);\n } catch (e) {\n log.warn('could not get connected server address', { error: e });\n }\n }\n if (this.pcState === PCState.Connected) {\n return;\n }\n await sleep(100);\n now = Date.now();\n }\n\n // have not reconnected, throw\n throw new ConnectionError('could not establish PC connection');\n }\n\n /* @internal */\n async sendDataPacket(packet: DataPacket, kind: DataPacket_Kind) {\n const msg = DataPacket.encode(packet).finish();\n\n // make sure we do have a data connection\n await this.ensurePublisherConnected(kind);\n\n if (kind === DataPacket_Kind.LOSSY && this.lossyDC) {\n this.lossyDC.send(msg);\n } else if (kind === DataPacket_Kind.RELIABLE && this.reliableDC) {\n this.reliableDC.send(msg);\n }\n }\n\n private async ensurePublisherConnected(kind: DataPacket_Kind) {\n if (!this.subscriberPrimary) {\n return;\n }\n\n if (!this.publisher) {\n throw new ConnectionError('publisher connection not set');\n }\n\n if (!this.publisher.isICEConnected && this.publisher.pc.iceConnectionState !== 'checking') {\n // start negotiation\n this.negotiate();\n }\n\n const targetChannel = this.dataChannelForKind(kind);\n if (targetChannel?.readyState === 'open') {\n return;\n }\n\n // wait until publisher ICE connected\n const endTime = new Date().getTime() + maxICEConnectTimeout;\n while (new Date().getTime() < endTime) {\n if (this.publisher.isICEConnected && this.dataChannelForKind(kind)?.readyState === 'open') {\n return;\n }\n await sleep(50);\n }\n\n throw new ConnectionError(\n `could not establish publisher connection, state ${this.publisher?.pc.iceConnectionState}`,\n );\n }\n\n /** @internal */\n negotiate() {\n if (!this.publisher) {\n return;\n }\n\n this.hasPublished = true;\n\n this.publisher.negotiate();\n }\n\n dataChannelForKind(kind: DataPacket_Kind, sub?: boolean): RTCDataChannel | undefined {\n if (!sub) {\n if (kind === DataPacket_Kind.LOSSY) {\n return this.lossyDC;\n }\n if (kind === DataPacket_Kind.RELIABLE) {\n return this.reliableDC;\n }\n } else {\n if (kind === DataPacket_Kind.LOSSY) {\n return this.lossyDCSub;\n }\n if (kind === DataPacket_Kind.RELIABLE) {\n return this.reliableDCSub;\n }\n }\n }\n}\n\nasync function getConnectedAddress(pc: RTCPeerConnection): Promise<string | undefined> {\n let selectedCandidatePairId = '';\n const candidatePairs = new Map<string, RTCIceCandidatePairStats>();\n // id -> candidate ip\n const candidates = new Map<string, string>();\n const stats: RTCStatsReport = await pc.getStats();\n stats.forEach((v) => {\n switch (v.type) {\n case 'transport':\n selectedCandidatePairId = v.selectedCandidatePairId;\n break;\n case 'candidate-pair':\n if (selectedCandidatePairId === '' && v.selected) {\n selectedCandidatePairId = v.id;\n }\n candidatePairs.set(v.id, v);\n break;\n case 'remote-candidate':\n candidates.set(v.id, `${v.address}:${v.port}`);\n break;\n default:\n }\n });\n\n if (selectedCandidatePairId === '') {\n return undefined;\n }\n const selectedID = candidatePairs.get(selectedCandidatePairId)?.remoteCandidateId;\n if (selectedID === undefined) {\n return undefined;\n }\n return candidates.get(selectedID);\n}\n\nclass SignalReconnectError extends Error {}\n\nexport type EngineEventCallbacks = {\n connected: () => void;\n disconnected: () => void;\n resuming: () => void;\n resumed: () => void;\n restarting: () => void;\n restarted: (joinResp: JoinResponse) => void;\n signalResumed: () => void;\n mediaTrackAdded: (\n track: MediaStreamTrack,\n streams: MediaStream,\n receiver?: RTCRtpReceiver,\n ) => void;\n activeSpeakersUpdate: (speakers: Array<SpeakerInfo>) => void;\n dataPacketReceived: (userPacket: UserPacket, kind: DataPacket_Kind) => void;\n transportsCreated: (publisher: PCTransport, subscriber: PCTransport) => void;\n};\n","import {\n AudioCaptureOptions,\n AudioPresets,\n ScreenSharePresets,\n TrackPublishDefaults,\n VideoCaptureOptions,\n VideoPresets,\n} from './options';\n\nexport const publishDefaults: TrackPublishDefaults = {\n audioBitrate: AudioPresets.speech.maxBitrate,\n dtx: true,\n simulcast: true,\n screenShareEncoding: ScreenSharePresets.h1080fps15.encoding,\n stopMicTrackOnMute: false,\n};\n\nexport const audioDefaults: AudioCaptureOptions = {\n autoGainControl: true,\n channelCount: 1,\n echoCancellation: true,\n noiseSuppression: true,\n};\n\nexport const videoDefaults: VideoCaptureOptions = {\n resolution: VideoPresets.h540.resolution,\n};\n","import { EventEmitter } from 'events';\nimport type TypedEmitter from 'typed-emitter';\nimport { toProtoSessionDescription } from '../api/SignalClient';\nimport log from '../logger';\nimport { RoomConnectOptions, RoomOptions } from '../options';\nimport {\n DataPacket_Kind,\n ParticipantInfo,\n ParticipantInfo_State,\n ParticipantPermission,\n Room as RoomModel,\n SpeakerInfo,\n UserPacket,\n} from '../proto/livekit_models';\nimport {\n ConnectionQualityUpdate,\n JoinResponse,\n SimulateScenario,\n StreamStateUpdate,\n SubscriptionPermissionUpdate,\n} from '../proto/livekit_rtc';\nimport DeviceManager from './DeviceManager';\nimport { ConnectionError, UnsupportedServer } from './errors';\nimport { EngineEvent, ParticipantEvent, RoomEvent, TrackEvent } from './events';\nimport LocalParticipant from './participant/LocalParticipant';\nimport Participant, { ConnectionQuality } from './participant/Participant';\nimport RemoteParticipant from './participant/RemoteParticipant';\nimport RTCEngine, { maxICEConnectTimeout } from './RTCEngine';\nimport { audioDefaults, publishDefaults, videoDefaults } from './track/defaults';\nimport LocalTrackPublication from './track/LocalTrackPublication';\nimport RemoteTrackPublication from './track/RemoteTrackPublication';\nimport { Track } from './track/Track';\nimport { TrackPublication } from './track/TrackPublication';\nimport { AdaptiveStreamSettings, RemoteTrack } from './track/types';\nimport { getNewAudioContext } from './track/utils';\nimport { isWeb, unpackStreamId } from './utils';\n\nexport enum RoomState {\n Disconnected = 'disconnected',\n Connected = 'connected',\n Reconnecting = 'reconnecting',\n}\n\n/**\n * In LiveKit, a room is the logical grouping for a list of participants.\n * Participants in a room can publish tracks, and subscribe to others' tracks.\n *\n * a Room fires [[RoomEvent | RoomEvents]].\n *\n * @noInheritDoc\n */\nclass Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>) {\n state: RoomState = RoomState.Disconnected;\n\n /** map of sid: [[RemoteParticipant]] */\n participants: Map<string, RemoteParticipant>;\n\n /**\n * list of participants that are actively speaking. when this changes\n * a [[RoomEvent.ActiveSpeakersChanged]] event is fired\n */\n activeSpeakers: Participant[] = [];\n\n /** @internal */\n engine!: RTCEngine;\n\n // available after connected\n /** server assigned unique room id */\n sid: string = '';\n\n /** user assigned name, derived from JWT token */\n name: string = '';\n\n /** the current participant */\n localParticipant: LocalParticipant;\n\n /** room metadata */\n metadata: string | undefined = undefined;\n\n /** options of room */\n options: RoomOptions;\n\n /** connect options of room */\n private connOptions?: RoomConnectOptions;\n\n private audioEnabled = true;\n\n private audioContext?: AudioContext;\n\n /**\n * Creates a new Room, the primary construct for a LiveKit session.\n * @param options\n */\n constructor(options?: RoomOptions) {\n super();\n this.participants = new Map();\n this.options = options || {};\n\n switch (this.options?.publishDefaults?.videoCodec) {\n case 'av1':\n case 'vp9':\n this.options.publishDefaults.simulcast = undefined;\n break;\n default:\n }\n\n this.options.audioCaptureDefaults = {\n ...audioDefaults,\n ...options?.audioCaptureDefaults,\n };\n this.options.videoCaptureDefaults = {\n ...videoDefaults,\n ...options?.videoCaptureDefaults,\n };\n this.options.publishDefaults = {\n ...publishDefaults,\n ...options?.publishDefaults,\n };\n\n this.createEngine();\n\n this.localParticipant = new LocalParticipant('', '', this.engine, this.options);\n }\n\n private createEngine() {\n if (this.engine) {\n return;\n }\n\n this.engine = new RTCEngine();\n\n this.engine.client.signalLatency = this.options.expSignalLatency;\n this.engine.client.onParticipantUpdate = this.handleParticipantUpdates;\n this.engine.client.onRoomUpdate = this.handleRoomUpdate;\n this.engine.client.onSpeakersChanged = this.handleSpeakersChanged;\n this.engine.client.onStreamStateUpdate = this.handleStreamStateUpdate;\n this.engine.client.onSubscriptionPermissionUpdate = this.handleSubscriptionPermissionUpdate;\n this.engine.client.onConnectionQuality = this.handleConnectionQualityUpdate;\n\n this.engine\n .on(\n EngineEvent.MediaTrackAdded,\n (mediaTrack: MediaStreamTrack, stream: MediaStream, receiver?: RTCRtpReceiver) => {\n this.onTrackAdded(mediaTrack, stream, receiver);\n },\n )\n .on(EngineEvent.Disconnected, () => {\n this.handleDisconnect();\n })\n .on(EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate)\n .on(EngineEvent.DataPacketReceived, this.handleDataPacket)\n .on(EngineEvent.Resuming, () => {\n this.state = RoomState.Reconnecting;\n this.emit(RoomEvent.Reconnecting);\n this.emit(RoomEvent.StateChanged, this.state);\n })\n .on(EngineEvent.Resumed, () => {\n this.state = RoomState.Connected;\n this.emit(RoomEvent.Reconnected);\n this.emit(RoomEvent.StateChanged, this.state);\n this.updateSubscriptions();\n })\n .on(EngineEvent.SignalResumed, () => {\n if (this.state === RoomState.Reconnecting) {\n this.sendSyncState();\n }\n })\n .on(EngineEvent.Restarting, this.handleRestarting)\n .on(EngineEvent.Restarted, this.handleRestarted);\n }\n\n /**\n * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.\n * In particular, it handles Chrome's unique behavior of creating `default`\n * devices. When encountered, it'll be removed from the list of devices.\n * The actual default device will be placed at top.\n * @param kind\n * @returns a list of available local devices\n */\n static getLocalDevices(\n kind?: MediaDeviceKind,\n requestPermissions: boolean = true,\n ): Promise<MediaDeviceInfo[]> {\n return DeviceManager.getInstance().getDevices(kind, requestPermissions);\n }\n\n connect = async (url: string, token: string, opts?: RoomConnectOptions) => {\n // guard against calling connect\n if (this.state !== RoomState.Disconnected) {\n log.warn(`already connected to room ${this.name}`);\n return;\n }\n\n // recreate engine if previously disconnected\n this.createEngine();\n\n this.acquireAudioContext();\n\n if (opts?.rtcConfig) {\n this.engine.rtcConfig = opts.rtcConfig;\n }\n\n this.connOptions = opts;\n\n try {\n const joinResponse = await this.engine.join(url, token, {\n autoSubscribe: opts?.autoSubscribe,\n publishOnly: opts?.publishOnly,\n adaptiveStream:\n typeof this.options?.adaptiveStream === 'object' ? true : this.options?.adaptiveStream,\n });\n log.debug(\n `connected to Livekit Server version: ${joinResponse.serverVersion}, region: ${joinResponse.serverRegion}`,\n );\n\n if (!joinResponse.serverVersion) {\n throw new UnsupportedServer('unknown server version');\n }\n\n if (joinResponse.serverVersion === '0.15.1' && this.options.dynacast) {\n log.debug('disabling dynacast due to server version');\n // dynacast has a bug in 0.15.1, so we cannot use it then\n this.options.dynacast = false;\n }\n\n this.state = RoomState.Connected;\n const pi = joinResponse.participant!;\n\n this.localParticipant.sid = pi.sid;\n this.localParticipant.identity = pi.identity;\n\n this.localParticipant.updateInfo(pi);\n // forward metadata changed for the local participant\n this.localParticipant\n .on(ParticipantEvent.MetadataChanged, (metadata: string | undefined) => {\n this.emit(RoomEvent.MetadataChanged, metadata, this.localParticipant);\n })\n .on(ParticipantEvent.ParticipantMetadataChanged, (metadata: string | undefined) => {\n this.emit(RoomEvent.ParticipantMetadataChanged, metadata, this.localParticipant);\n })\n .on(ParticipantEvent.TrackMuted, (pub: TrackPublication) => {\n this.emit(RoomEvent.TrackMuted, pub, this.localParticipant);\n })\n .on(ParticipantEvent.TrackUnmuted, (pub: TrackPublication) => {\n this.emit(RoomEvent.TrackUnmuted, pub, this.localParticipant);\n })\n .on(ParticipantEvent.LocalTrackPublished, (pub: LocalTrackPublication) => {\n this.emit(RoomEvent.LocalTrackPublished, pub, this.localParticipant);\n })\n .on(ParticipantEvent.LocalTrackUnpublished, (pub: LocalTrackPublication) => {\n this.emit(RoomEvent.LocalTrackUnpublished, pub, this.localParticipant);\n })\n .on(ParticipantEvent.ConnectionQualityChanged, (quality: ConnectionQuality) => {\n this.emit(RoomEvent.ConnectionQualityChanged, quality, this.localParticipant);\n })\n .on(ParticipantEvent.MediaDevicesError, (e: Error) => {\n this.emit(RoomEvent.MediaDevicesError, e);\n })\n .on(\n ParticipantEvent.ParticipantPermissionsChanged,\n (prevPermissions: ParticipantPermission) => {\n this.emit(\n RoomEvent.ParticipantPermissionsChanged,\n prevPermissions,\n this.localParticipant,\n );\n },\n );\n\n // populate remote participants, these should not trigger new events\n joinResponse.otherParticipants.forEach((info) => {\n this.getOrCreateParticipant(info.sid, info);\n });\n\n this.name = joinResponse.room!.name;\n this.sid = joinResponse.room!.sid;\n this.metadata = joinResponse.room!.metadata;\n this.emit(RoomEvent.StateChanged, this.state);\n } catch (err) {\n this.engine.close();\n throw err;\n }\n\n // don't return until ICE connected\n return new Promise<Room>((resolve, reject) => {\n const connectTimeout = setTimeout(() => {\n // timeout\n this.engine.close();\n reject(new ConnectionError('could not connect after timeout'));\n }, maxICEConnectTimeout);\n\n this.engine.once(EngineEvent.Connected, () => {\n clearTimeout(connectTimeout);\n\n // also hook unload event\n if (isWeb()) {\n window.addEventListener('beforeunload', this.onBeforeUnload);\n navigator.mediaDevices?.addEventListener('devicechange', this.handleDeviceChange);\n }\n\n resolve(this);\n });\n });\n };\n\n /**\n * disconnects the room, emits [[RoomEvent.Disconnected]]\n */\n disconnect = (stopTracks = true) => {\n // send leave\n if (this.engine) {\n this.engine.client.sendLeave();\n this.engine.close();\n }\n this.handleDisconnect(stopTracks);\n /* @ts-ignore */\n this.engine = undefined;\n };\n\n /**\n * retrieves a participant by identity\n * @param identity\n * @returns\n */\n getParticipantByIdentity(identity: string): Participant | undefined {\n for (const [, p] of this.participants) {\n if (p.identity === identity) {\n return p;\n }\n }\n if (this.localParticipant.identity === identity) {\n return this.localParticipant;\n }\n }\n\n /**\n * @internal for testing\n */\n simulateScenario(scenario: string) {\n let req: SimulateScenario | undefined;\n switch (scenario) {\n case 'speaker':\n req = SimulateScenario.fromPartial({\n speakerUpdate: 3,\n });\n break;\n case 'node-failure':\n req = SimulateScenario.fromPartial({\n nodeFailure: true,\n });\n break;\n case 'server-leave':\n req = SimulateScenario.fromPartial({\n serverLeave: true,\n });\n break;\n case 'migration':\n req = SimulateScenario.fromPartial({\n migration: true,\n });\n break;\n default:\n }\n if (req) {\n this.engine.client.sendSimulateScenario(req);\n }\n }\n\n private onBeforeUnload = () => {\n this.disconnect();\n };\n\n /**\n * Browsers have different policies regarding audio playback. Most requiring\n * some form of user interaction (click/tap/etc).\n * In those cases, audio will be silent until a click/tap triggering one of the following\n * - `startAudio`\n * - `getUserMedia`\n */\n async startAudio() {\n this.acquireAudioContext();\n\n const elements: Array<HTMLMediaElement> = [];\n this.participants.forEach((p) => {\n p.audioTracks.forEach((t) => {\n if (t.track) {\n t.track.attachedElements.forEach((e) => {\n elements.push(e);\n });\n }\n });\n });\n\n try {\n await Promise.all(elements.map((e) => e.play()));\n this.handleAudioPlaybackStarted();\n } catch (err) {\n this.handleAudioPlaybackFailed(err);\n throw err;\n }\n }\n\n /**\n * Returns true if audio playback is enabled\n */\n get canPlaybackAudio(): boolean {\n return this.audioEnabled;\n }\n\n /**\n * Switches all active device used in this room to the given device.\n *\n * Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)\n *\n * @param kind use `videoinput` for camera track,\n * `audioinput` for microphone track,\n * `audiooutput` to set speaker for all incoming audio tracks\n * @param deviceId\n */\n async switchActiveDevice(kind: MediaDeviceKind, deviceId: string) {\n if (kind === 'audioinput') {\n const tracks = Array.from(this.localParticipant.audioTracks.values()).filter(\n (track) => track.source === Track.Source.Microphone,\n );\n await Promise.all(tracks.map((t) => t.audioTrack?.setDeviceId(deviceId)));\n this.options.audioCaptureDefaults!.deviceId = deviceId;\n } else if (kind === 'videoinput') {\n const tracks = Array.from(this.localParticipant.videoTracks.values()).filter(\n (track) => track.source === Track.Source.Camera,\n );\n await Promise.all(tracks.map((t) => t.videoTrack?.setDeviceId(deviceId)));\n this.options.videoCaptureDefaults!.deviceId = deviceId;\n } else if (kind === 'audiooutput') {\n const elements: HTMLMediaElement[] = [];\n this.participants.forEach((p) => {\n p.audioTracks.forEach((t) => {\n if (t.isSubscribed && t.track) {\n t.track.attachedElements.forEach((e) => {\n elements.push(e);\n });\n }\n });\n });\n\n await Promise.all(\n elements.map(async (e) => {\n if ('setSinkId' in e) {\n /* @ts-ignore */\n await e.setSinkId(deviceId);\n }\n }),\n );\n }\n }\n\n private onTrackAdded(\n mediaTrack: MediaStreamTrack,\n stream: MediaStream,\n receiver?: RTCRtpReceiver,\n ) {\n const parts = unpackStreamId(stream.id);\n const participantId = parts[0];\n let trackId = parts[1];\n if (!trackId || trackId === '') trackId = mediaTrack.id;\n\n const participant = this.getOrCreateParticipant(participantId);\n let adaptiveStreamSettings: AdaptiveStreamSettings | undefined;\n if (this.options.adaptiveStream) {\n if (typeof this.options.adaptiveStream === 'object') {\n adaptiveStreamSettings = this.options.adaptiveStream;\n } else {\n adaptiveStreamSettings = {};\n }\n }\n participant.addSubscribedMediaTrack(\n mediaTrack,\n trackId,\n stream,\n receiver,\n adaptiveStreamSettings,\n );\n }\n\n private handleRestarting = () => {\n this.state = RoomState.Reconnecting;\n this.emit(RoomEvent.Reconnecting);\n this.emit(RoomEvent.StateChanged, this.state);\n\n // also unwind existing participants & existing subscriptions\n for (const p of this.participants.values()) {\n this.handleParticipantDisconnected(p.sid, p);\n }\n };\n\n private handleRestarted = async (joinResponse: JoinResponse) => {\n log.debug(`reconnected to server region ${joinResponse.serverRegion}`);\n this.state = RoomState.Connected;\n this.emit(RoomEvent.Reconnected);\n this.emit(RoomEvent.StateChanged, this.state);\n\n // rehydrate participants\n if (joinResponse.participant) {\n // with a restart, the sid will have changed, we'll map our understanding to it\n this.localParticipant.sid = joinResponse.participant.sid;\n this.handleParticipantUpdates([joinResponse.participant]);\n }\n this.handleParticipantUpdates(joinResponse.otherParticipants);\n\n // unpublish & republish tracks\n const localPubs: LocalTrackPublication[] = [];\n this.localParticipant.tracks.forEach((pub) => {\n if (pub.track) {\n localPubs.push(pub);\n }\n });\n\n await Promise.all(\n localPubs.map(async (pub) => {\n const track = pub.track!;\n this.localParticipant.unpublishTrack(track, false);\n this.localParticipant.publishTrack(track, pub.options);\n }),\n );\n };\n\n private handleDisconnect(shouldStopTracks = true) {\n if (this.state === RoomState.Disconnected) {\n return;\n }\n this.participants.forEach((p) => {\n p.tracks.forEach((pub) => {\n p.unpublishTrack(pub.trackSid);\n });\n });\n\n this.localParticipant.tracks.forEach((pub) => {\n if (pub.track) {\n this.localParticipant.unpublishTrack(pub.track);\n }\n if (shouldStopTracks) {\n pub.track?.detach();\n pub.track?.stop();\n }\n });\n\n this.participants.clear();\n this.activeSpeakers = [];\n if (this.audioContext) {\n this.audioContext.close();\n this.audioContext = undefined;\n }\n if (isWeb()) {\n window.removeEventListener('beforeunload', this.onBeforeUnload);\n navigator.mediaDevices?.removeEventListener('devicechange', this.handleDeviceChange);\n }\n this.state = RoomState.Disconnected;\n this.emit(RoomEvent.Disconnected);\n this.emit(RoomEvent.StateChanged, this.state);\n }\n\n private handleParticipantUpdates = (participantInfos: ParticipantInfo[]) => {\n // handle changes to participant state, and send events\n participantInfos.forEach((info) => {\n if (\n info.sid === this.localParticipant.sid ||\n info.identity === this.localParticipant.identity\n ) {\n this.localParticipant.updateInfo(info);\n return;\n }\n\n let remoteParticipant = this.participants.get(info.sid);\n const isNewParticipant = !remoteParticipant;\n\n // create participant if doesn't exist\n remoteParticipant = this.getOrCreateParticipant(info.sid, info);\n\n // when it's disconnected, send updates\n if (info.state === ParticipantInfo_State.DISCONNECTED) {\n this.handleParticipantDisconnected(info.sid, remoteParticipant);\n } else if (isNewParticipant) {\n // fire connected event\n this.emit(RoomEvent.ParticipantConnected, remoteParticipant);\n } else {\n // just update, no events\n remoteParticipant.updateInfo(info);\n }\n });\n };\n\n private handleParticipantDisconnected(sid: string, participant?: RemoteParticipant) {\n // remove and send event\n this.participants.delete(sid);\n if (!participant) {\n return;\n }\n\n participant.tracks.forEach((publication) => {\n participant.unpublishTrack(publication.trackSid);\n });\n this.emit(RoomEvent.ParticipantDisconnected, participant);\n }\n\n // updates are sent only when there's a change to speaker ordering\n private handleActiveSpeakersUpdate = (speakers: SpeakerInfo[]) => {\n const activeSpeakers: Participant[] = [];\n const seenSids: any = {};\n speakers.forEach((speaker) => {\n seenSids[speaker.sid] = true;\n if (speaker.sid === this.localParticipant.sid) {\n this.localParticipant.audioLevel = speaker.level;\n this.localParticipant.setIsSpeaking(true);\n activeSpeakers.push(this.localParticipant);\n } else {\n const p = this.participants.get(speaker.sid);\n if (p) {\n p.audioLevel = speaker.level;\n p.setIsSpeaking(true);\n activeSpeakers.push(p);\n }\n }\n });\n\n if (!seenSids[this.localParticipant.sid]) {\n this.localParticipant.audioLevel = 0;\n this.localParticipant.setIsSpeaking(false);\n }\n this.participants.forEach((p) => {\n if (!seenSids[p.sid]) {\n p.audioLevel = 0;\n p.setIsSpeaking(false);\n }\n });\n\n this.activeSpeakers = activeSpeakers;\n this.emit(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n };\n\n // process list of changed speakers\n private handleSpeakersChanged = (speakerUpdates: SpeakerInfo[]) => {\n const lastSpeakers = new Map<string, Participant>();\n this.activeSpeakers.forEach((p) => {\n lastSpeakers.set(p.sid, p);\n });\n speakerUpdates.forEach((speaker) => {\n let p: Participant | undefined = this.participants.get(speaker.sid);\n if (speaker.sid === this.localParticipant.sid) {\n p = this.localParticipant;\n }\n if (!p) {\n return;\n }\n p.audioLevel = speaker.level;\n p.setIsSpeaking(speaker.active);\n\n if (speaker.active) {\n lastSpeakers.set(speaker.sid, p);\n } else {\n lastSpeakers.delete(speaker.sid);\n }\n });\n const activeSpeakers = Array.from(lastSpeakers.values());\n activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);\n this.activeSpeakers = activeSpeakers;\n this.emit(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n };\n\n private handleStreamStateUpdate = (streamStateUpdate: StreamStateUpdate) => {\n streamStateUpdate.streamStates.forEach((streamState) => {\n const participant = this.participants.get(streamState.participantSid);\n if (!participant) {\n return;\n }\n const pub = participant.getTrackPublication(streamState.trackSid);\n if (!pub || !pub.track) {\n return;\n }\n pub.track.streamState = Track.streamStateFromProto(streamState.state);\n participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);\n this.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);\n });\n };\n\n private handleSubscriptionPermissionUpdate = (update: SubscriptionPermissionUpdate) => {\n const participant = this.participants.get(update.participantSid);\n if (!participant) {\n return;\n }\n const pub = participant.getTrackPublication(update.trackSid);\n if (!pub) {\n return;\n }\n\n pub._allowed = update.allowed;\n participant.emit(\n ParticipantEvent.TrackSubscriptionPermissionChanged,\n pub,\n pub.subscriptionStatus,\n );\n this.emit(\n ParticipantEvent.TrackSubscriptionPermissionChanged,\n pub,\n pub.subscriptionStatus,\n participant,\n );\n };\n\n private handleDataPacket = (userPacket: UserPacket, kind: DataPacket_Kind) => {\n // find the participant\n const participant = this.participants.get(userPacket.participantSid);\n\n this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind);\n\n // also emit on the participant\n participant?.emit(ParticipantEvent.DataReceived, userPacket.payload, kind);\n };\n\n private handleAudioPlaybackStarted = () => {\n if (this.canPlaybackAudio) {\n return;\n }\n this.audioEnabled = true;\n this.emit(RoomEvent.AudioPlaybackStatusChanged, true);\n };\n\n private handleAudioPlaybackFailed = (e: any) => {\n log.warn('could not playback audio', e);\n if (!this.canPlaybackAudio) {\n return;\n }\n this.audioEnabled = false;\n this.emit(RoomEvent.AudioPlaybackStatusChanged, false);\n };\n\n private handleDeviceChange = async () => {\n this.emit(RoomEvent.MediaDevicesChanged);\n };\n\n private handleRoomUpdate = (r: RoomModel) => {\n this.metadata = r.metadata;\n this.emit(RoomEvent.RoomMetadataChanged, r.metadata);\n };\n\n private handleConnectionQualityUpdate = (update: ConnectionQualityUpdate) => {\n update.updates.forEach((info) => {\n if (info.participantSid === this.localParticipant.sid) {\n this.localParticipant.setConnectionQuality(info.quality);\n return;\n }\n const participant = this.participants.get(info.participantSid);\n if (participant) {\n participant.setConnectionQuality(info.quality);\n }\n });\n };\n\n private acquireAudioContext() {\n if (this.audioContext) {\n this.audioContext.close();\n }\n // by using an AudioContext, it reduces lag on audio elements\n // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854\n const ctx = getNewAudioContext();\n if (ctx) {\n this.audioContext = ctx;\n }\n }\n\n private createParticipant(id: string, info?: ParticipantInfo): RemoteParticipant {\n let participant: RemoteParticipant;\n if (info) {\n participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info);\n } else {\n participant = new RemoteParticipant(this.engine.client, id, '');\n }\n return participant;\n }\n\n private getOrCreateParticipant(id: string, info?: ParticipantInfo): RemoteParticipant {\n if (this.participants.has(id)) {\n return this.participants.get(id) as RemoteParticipant;\n }\n // it's possible for the RTC track to arrive before signaling data\n // when this happens, we'll create the participant and make the track work\n const participant = this.createParticipant(id, info);\n this.participants.set(id, participant);\n\n // also forward events\n // trackPublished is only fired for tracks added after both local participant\n // and remote participant joined the room\n participant\n .on(ParticipantEvent.TrackPublished, (trackPublication: RemoteTrackPublication) => {\n this.emit(RoomEvent.TrackPublished, trackPublication, participant);\n })\n .on(\n ParticipantEvent.TrackSubscribed,\n (track: RemoteTrack, publication: RemoteTrackPublication) => {\n // monitor playback status\n if (track.kind === Track.Kind.Audio) {\n track.on(TrackEvent.AudioPlaybackStarted, this.handleAudioPlaybackStarted);\n track.on(TrackEvent.AudioPlaybackFailed, this.handleAudioPlaybackFailed);\n }\n this.emit(RoomEvent.TrackSubscribed, track, publication, participant);\n },\n )\n .on(ParticipantEvent.TrackUnpublished, (publication: RemoteTrackPublication) => {\n this.emit(RoomEvent.TrackUnpublished, publication, participant);\n })\n .on(\n ParticipantEvent.TrackUnsubscribed,\n (track: RemoteTrack, publication: RemoteTrackPublication) => {\n this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);\n },\n )\n .on(ParticipantEvent.TrackSubscriptionFailed, (sid: string) => {\n this.emit(RoomEvent.TrackSubscriptionFailed, sid, participant);\n })\n .on(ParticipantEvent.TrackMuted, (pub: TrackPublication) => {\n this.emit(RoomEvent.TrackMuted, pub, participant);\n })\n .on(ParticipantEvent.TrackUnmuted, (pub: TrackPublication) => {\n this.emit(RoomEvent.TrackUnmuted, pub, participant);\n })\n .on(ParticipantEvent.MetadataChanged, (metadata: string | undefined) => {\n this.emit(RoomEvent.MetadataChanged, metadata, participant);\n })\n .on(ParticipantEvent.ParticipantMetadataChanged, (metadata: string | undefined) => {\n this.emit(RoomEvent.ParticipantMetadataChanged, metadata, participant);\n })\n .on(ParticipantEvent.ConnectionQualityChanged, (quality: ConnectionQuality) => {\n this.emit(RoomEvent.ConnectionQualityChanged, quality, participant);\n })\n .on(\n ParticipantEvent.ParticipantPermissionsChanged,\n (prevPermissions: ParticipantPermission) => {\n this.emit(RoomEvent.ParticipantPermissionsChanged, prevPermissions, participant);\n },\n );\n return participant;\n }\n\n private sendSyncState() {\n if (\n this.engine.subscriber === undefined ||\n this.engine.subscriber.pc.localDescription === null\n ) {\n return;\n }\n const previousSdp = this.engine.subscriber.pc.localDescription;\n\n /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,\n in this case, we send unsub tracks, so server add all tracks to this\n subscribe pc and unsub special tracks from it.\n 2. autosubscribe off, we send subscribed tracks.\n */\n const sendUnsub = this.connOptions?.autoSubscribe || false;\n const trackSids = new Array<string>();\n this.participants.forEach((participant) => {\n participant.tracks.forEach((track) => {\n if (track.isSubscribed !== sendUnsub) {\n trackSids.push(track.trackSid);\n }\n });\n });\n\n this.engine.client.sendSyncState({\n answer: toProtoSessionDescription({\n sdp: previousSdp.sdp,\n type: previousSdp.type,\n }),\n subscription: {\n trackSids,\n subscribe: !sendUnsub,\n participantTracks: [],\n },\n publishTracks: this.localParticipant.publishedTracksInfo(),\n dataChannels: this.localParticipant.dataChannelsInfo(),\n });\n }\n\n /**\n * After resuming, we'll need to notify the server of the current\n * subscription settings.\n */\n private updateSubscriptions() {\n for (const p of this.participants.values()) {\n for (const pub of p.videoTracks.values()) {\n if (pub.isSubscribed && pub instanceof RemoteTrackPublication) {\n pub.emitTrackUpdate();\n }\n }\n }\n }\n\n // /** @internal */\n emit<E extends keyof RoomEventCallbacks>(\n event: E,\n ...args: Parameters<RoomEventCallbacks[E]>\n ): boolean {\n log.debug('room event', { event, args });\n return super.emit(event, ...args);\n }\n}\n\nexport default Room;\n\nexport type RoomEventCallbacks = {\n reconnecting: () => void;\n reconnected: () => void;\n disconnected: () => void;\n stateChanged: (state: RoomState) => void;\n mediaDevicesChanged: () => void;\n participantConnected: (participant: RemoteParticipant) => void;\n participantDisconnected: (participant: RemoteParticipant) => void;\n trackPublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;\n trackSubscribed: (\n track: RemoteTrack,\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => void;\n trackSubscriptionFailed: (trackSid: string, participant: RemoteParticipant) => void;\n trackUnpublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;\n trackUnsubscribed: (\n track: RemoteTrack,\n publication: RemoteTrackPublication,\n participant: RemoteParticipant,\n ) => void;\n trackMuted: (publication: TrackPublication, participant: Participant) => void;\n trackUnmuted: (publication: TrackPublication, participant: Participant) => void;\n localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;\n localTrackUnpublished: (\n publication: LocalTrackPublication,\n participant: LocalParticipant,\n ) => void;\n /**\n * @deprecated use [[participantMetadataChanged]] instead\n */\n metadataChanged: (\n metadata: string | undefined,\n participant?: RemoteParticipant | LocalParticipant,\n ) => void;\n participantMetadataChanged: (\n metadata: string | undefined,\n participant: RemoteParticipant | LocalParticipant,\n ) => void;\n participantPermissionsChanged: (\n prevPermissions: ParticipantPermission,\n participant: RemoteParticipant | LocalParticipant,\n ) => void;\n activeSpeakersChanged: (speakers: Array<Participant>) => void;\n roomMetadataChanged: (metadata: string) => void;\n dataReceived: (\n payload: Uint8Array,\n participant?: RemoteParticipant,\n kind?: DataPacket_Kind,\n ) => void;\n connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void;\n mediaDevicesError: (error: Error) => void;\n trackStreamStateChanged: (\n publication: RemoteTrackPublication,\n streamState: Track.StreamState,\n participant: RemoteParticipant,\n ) => void;\n trackSubscriptionPermissionChanged: (\n publication: RemoteTrackPublication,\n status: TrackPublication.SubscriptionStatus,\n participant: RemoteParticipant,\n ) => void;\n audioPlaybackChanged: (playing: boolean) => void;\n};\n","import { TrackInvalidError } from '../errors';\nimport { mediaTrackToLocalTrack } from '../participant/publishUtils';\nimport { audioDefaults, videoDefaults } from './defaults';\nimport LocalAudioTrack from './LocalAudioTrack';\nimport LocalTrack from './LocalTrack';\nimport LocalVideoTrack from './LocalVideoTrack';\nimport {\n AudioCaptureOptions,\n CreateLocalTracksOptions,\n ScreenShareCaptureOptions,\n VideoCaptureOptions,\n VideoPresets,\n} from './options';\nimport { Track } from './Track';\nimport { constraintsForOptions, mergeDefaultOptions } from './utils';\n\n/**\n * Creates a local video and audio track at the same time. When acquiring both\n * audio and video tracks together, it'll display a single permission prompt to\n * the user instead of two separate ones.\n * @param options\n */\nexport async function createLocalTracks(\n options?: CreateLocalTracksOptions,\n): Promise<Array<LocalTrack>> {\n // set default options to true\n options ??= {};\n options.audio ??= true;\n options.video ??= true;\n\n const opts = mergeDefaultOptions(options, audioDefaults, videoDefaults);\n const constraints = constraintsForOptions(opts);\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n return stream.getTracks().map((mediaStreamTrack) => {\n const isAudio = mediaStreamTrack.kind === 'audio';\n let trackOptions = isAudio ? options!.audio : options!.video;\n if (typeof trackOptions === 'boolean' || !trackOptions) {\n trackOptions = {};\n }\n let trackConstraints: MediaTrackConstraints | undefined;\n const conOrBool = isAudio ? constraints.audio : constraints.video;\n if (typeof conOrBool !== 'boolean') {\n trackConstraints = conOrBool;\n }\n const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints);\n if (track.kind === Track.Kind.Video) {\n track.source = Track.Source.Camera;\n } else if (track.kind === Track.Kind.Audio) {\n track.source = Track.Source.Microphone;\n }\n track.mediaStream = stream;\n return track;\n });\n}\n\n/**\n * Creates a [[LocalVideoTrack]] with getUserMedia()\n * @param options\n */\nexport async function createLocalVideoTrack(\n options?: VideoCaptureOptions,\n): Promise<LocalVideoTrack> {\n const tracks = await createLocalTracks({\n audio: false,\n video: options,\n });\n return <LocalVideoTrack>tracks[0];\n}\n\nexport async function createLocalAudioTrack(\n options?: AudioCaptureOptions,\n): Promise<LocalAudioTrack> {\n const tracks = await createLocalTracks({\n audio: options,\n video: false,\n });\n return <LocalAudioTrack>tracks[0];\n}\n\n/**\n * Creates a screen capture tracks with getDisplayMedia().\n * A LocalVideoTrack is always created and returned.\n * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n */\nexport async function createLocalScreenTracks(\n options?: ScreenShareCaptureOptions,\n): Promise<Array<LocalTrack>> {\n if (options === undefined) {\n options = {};\n }\n if (options.resolution === undefined) {\n options.resolution = VideoPresets.fhd.resolution;\n }\n\n let videoConstraints: MediaTrackConstraints | boolean = true;\n if (options.resolution) {\n videoConstraints = {\n width: options.resolution.width,\n height: options.resolution.height,\n };\n }\n // typescript definition is missing getDisplayMedia: https://github.com/microsoft/TypeScript/issues/33232\n // @ts-ignore\n const stream: MediaStream = await navigator.mediaDevices.getDisplayMedia({\n audio: options.audio ?? false,\n video: videoConstraints,\n });\n\n const tracks = stream.getVideoTracks();\n if (tracks.length === 0) {\n throw new TrackInvalidError('no video track found');\n }\n const screenVideo = new LocalVideoTrack(tracks[0]);\n screenVideo.source = Track.Source.ScreenShare;\n const localTracks: Array<LocalTrack> = [screenVideo];\n if (stream.getAudioTracks().length > 0) {\n const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0]);\n screenAudio.source = Track.Source.ScreenShareAudio;\n localTracks.push(screenAudio);\n }\n return localTracks;\n}\n","import log, { LogLevel, setLogLevel } from './logger';\nimport { ConnectOptions } from './options';\nimport { MediaDeviceFailure } from './room/errors';\nimport { RoomEvent } from './room/events';\nimport Room from './room/Room';\n\nexport { version } from './version';\n\n/**\n * @deprecated Use room.connect() instead\n *\n * Connects to a LiveKit room, shorthand for `new Room()` and [[Room.connect]]\n *\n * ```typescript\n * connect('wss://myhost.livekit.io', token, {\n * // publish audio and video tracks on joining\n * audio: true,\n * video: true,\n * captureDefaults: {\n * facingMode: 'user',\n * },\n * })\n * ```\n * @param url URL to LiveKit server\n * @param token AccessToken, a JWT token that includes authentication and room details\n * @param options\n */\nexport async function connect(url: string, token: string, options?: ConnectOptions): Promise<Room> {\n options ??= {};\n if (options.adaptiveStream === undefined) {\n options.adaptiveStream = options.autoManageVideo === true ? {} : undefined;\n }\n setLogLevel(options.logLevel ?? LogLevel.warn);\n\n const config: RTCConfiguration = options.rtcConfig ?? {};\n if (options.iceServers) {\n config.iceServers = options.iceServers;\n }\n\n const room = new Room(options);\n\n // connect to room\n await room.connect(url, token, options);\n\n const publishAudio: boolean = options.audio ?? false;\n const publishVideo: boolean = options.video ?? false;\n\n if (publishAudio || publishVideo) {\n setTimeout(async () => {\n // if publishing both\n let err: any;\n if (publishAudio && publishVideo) {\n try {\n await room.localParticipant.enableCameraAndMicrophone();\n } catch (e) {\n const errKind = MediaDeviceFailure.getFailure(e);\n log.warn('received error while creating media', { error: errKind });\n if (e instanceof Error) {\n log.warn(e.message);\n }\n\n // when it's a device issue, try to publish the other kind\n if (\n errKind === MediaDeviceFailure.NotFound ||\n errKind === MediaDeviceFailure.DeviceInUse\n ) {\n try {\n await room.localParticipant.setMicrophoneEnabled(true);\n } catch (audioErr) {\n err = audioErr;\n }\n } else {\n err = e;\n }\n }\n } else if (publishAudio) {\n try {\n await room.localParticipant.setMicrophoneEnabled(true);\n } catch (e) {\n err = e;\n }\n } else if (publishVideo) {\n try {\n await room.localParticipant.setCameraEnabled(true);\n } catch (e) {\n err = e;\n }\n }\n\n if (err) {\n room.emit(RoomEvent.MediaDevicesError, err);\n log.error('could not create media', err);\n }\n });\n }\n\n return room;\n}\n"],"names":["LogLevel","root","definition","this","noop","undefinedType","isIE","window","navigator","test","userAgent","logMethods","bindMethod","obj","methodName","method","bind","Function","prototype","call","e","apply","arguments","traceForIE","console","log","trace","realMethod","undefined","replaceLoggingMethods","level","loggerName","i","length","methodFactory","debug","enableLoggingWhenConsoleArrives","defaultMethodFactory","Logger","name","defaultLevel","factory","self","currentLevel","storageKey","getPersistedLevel","storedLevel","localStorage","ignore","cookie","document","location","indexOf","encodeURIComponent","exec","slice","levels","TRACE","DEBUG","INFO","WARN","ERROR","SILENT","getLevel","setLevel","persist","toUpperCase","persistLevelIfPossible","levelNum","levelName","setDefaultLevel","resetLevel","removeItem","clearPersistedLevel","enableAll","disableAll","initialLevel","defaultLogger","_loggersByName","getLogger","TypeError","logger","_log","noConflict","getLoggers","module","exports","livekitLogger","setLogLevel","info","long","Long","wasm","WebAssembly","Instance","Module","Uint8Array","low","high","unsigned","isLong","__isLong__","Object","defineProperty","value","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","str","radix","Error","RangeError","p","substring","radixToPower","result","size","min","parseInt","power","mul","add","fromValue","val","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","toString","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","other","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","max","floor","approxRem","log2","ceil","LN2","delta","approxRes","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","hi","lo","fromBytes","bytes","fromBytesLE","fromBytesBE","aspromise","fn","ctx","params","Array","offset","index","pending","Promise","resolve","reject","err","base64","string","n","charAt","b64","s64","encode","buffer","start","end","parts","t","chunk","j","b","push","String","fromCharCode","join","invalidEncoding","decode","c","charCodeAt","eventemitter","EventEmitter","_listeners","on","evt","EventEmitter$1","off","listeners","splice","emit","args","float","Float32Array","f32","f8b","writeFloat_f32_cpy","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","round","exponent","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","inquire_1","moduleName","eval","utf8","len","read","write","c1","c2","pool_1","alloc","SIZE","MAX","slab","longbits","LongBits","util","require$$0","zero","zzEncode","zzDecode","zeroHash","from","isString","LongBits$2","toLong","Boolean","fromHash","hash","toHash","mask","part0","part1","part2","merge","dst","src","ifNotSet","keys","newError","CustomError","message","properties","get","captureStackTrace","stack","create","constructor","asPromise","require$$1","require$$2","require$$3","inquire","require$$4","require$$5","pool","require$$6","require$$7","isNode","global","process","versions","node","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","prop","hasOwnProperty","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","lcFirst","toLowerCase","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","enums","json","_configure","encoding","allocUnsafe","Buffer_allocUnsafe","BufferWriter","writer","Writer","Op","next","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","subarray","_push","Writer$1","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","set","fork","reset","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","copy","byteLength","BufferReader","reader","Reader","indexOutOfRange","writeLength","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","Reader$1","_slice","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","request","callback","response","setTimeout","endedByRPC","roots","protobuf","configure","build","rpc","TrackType","TrackSource","VideoQuality","ConnectionQuality","ClientConfigSetting","ParticipantInfo_State","DataPacket_Kind","ClientInfo_SDK","minimal","globalThis","trackTypeFromJSON","object","AUDIO","VIDEO","DATA","UNRECOGNIZED","trackTypeToJSON","trackSourceFromJSON","UNKNOWN","CAMERA","MICROPHONE","SCREEN_SHARE","SCREEN_SHARE_AUDIO","trackSourceToJSON","videoQualityFromJSON","LOW","MEDIUM","HIGH","OFF","videoQualityToJSON","connectionQualityFromJSON","POOR","GOOD","EXCELLENT","clientConfigSettingFromJSON","UNSET","DISABLED","ENABLED","clientConfigSettingToJSON","participantInfo_StateFromJSON","JOINING","JOINED","ACTIVE","DISCONNECTED","dataPacket_KindFromJSON","RELIABLE","LOSSY","clientInfo_SDKFromJSON","JS","SWIFT","ANDROID","FLUTTER","GO","UNITY","_m0","Room","sid","emptyTimeout","maxParticipants","creationTime","turnPassword","v","enabledCodecs","Codec","metadata","numParticipants","activeRecording","input","tag","longToNumber","fromJSON","map","toJSON","fromPartial","_a","_b","_c","_d","_e","_f","_g","_h","_j","_k","mime","fmtpLine","ParticipantPermission","canSubscribe","canPublish","canPublishData","hidden","recorder","ParticipantInfo","identity","state","tracks","TrackInfo","joinedAt","version","permission","region","isPublisher","participantInfo_StateToJSON","type","muted","width","height","simulcast","disableDtx","source","layers","VideoLayer","mimeType","mid","_l","_m","quality","bitrate","ssrc","DataPacket","kind","user","UserPacket","speaker","ActiveSpeakerUpdate","dataPacket_KindToJSON","speakers","SpeakerInfo","active","createBaseUserPacket","participantSid","payload","destinationSids","bytesFromBase64","arr","bin","btoa","forEach","byte","base64FromBytes","ParticipantTracks","trackSids","ClientInfo","sdk","protocol","os","osVersion","deviceModel","browser","browserVersion","address","clientInfo_SDKToJSON","ClientConfiguration","video","VideoConfiguration","screen","resumeConnection","hardwareEncoder","atob","MAX_SAFE_INTEGER","SignalTarget","StreamState","signalTargetFromJSON","PUBLISHER","SUBSCRIBER","signalTargetToJSON","streamStateFromJSON","PAUSED","SignalRequest","offer","SessionDescription","answer","trickle","TrickleRequest","addTrack","AddTrackRequest","mute","MuteTrackRequest","subscription","UpdateSubscription","trackSetting","UpdateTrackSettings","leave","LeaveRequest","updateLayers","UpdateVideoLayers","subscriptionPermission","SubscriptionPermission","syncState","SyncState","simulate","SimulateScenario","SignalResponse","JoinResponse","update","ParticipantUpdate","trackPublished","TrackPublishedResponse","speakersChanged","SpeakersChanged","roomUpdate","RoomUpdate","connectionQuality","ConnectionQualityUpdate","streamStateUpdate","StreamStateUpdate","subscribedQualityUpdate","SubscribedQualityUpdate","subscriptionPermissionUpdate","SubscriptionPermissionUpdate","refreshToken","trackUnpublished","TrackUnpublishedResponse","cid","candidateInit","target","room","participant","otherParticipants","serverVersion","iceServers","ICEServer","subscriberPrimary","alternativeUrl","clientConfiguration","serverRegion","track","trackSid","sdp","participants","subscribe","participantTracks","disabled","canReconnect","urls","username","credential","ConnectionQualityInfo","score","connectionQualityToJSON","updates","StreamStateInfo","streamStateToJSON","streamStates","SubscribedQuality","enabled","subscribedQualities","TrackPermission","allTracks","participantIdentity","allParticipants","trackPermissions","allowed","publishTracks","dataChannels","DataChannelInfo","label","id","speakerUpdate","nodeFailure","migration","serverLeave","LivekitError","code","ConnectionError","super","TrackInvalidError","UnsupportedServer","UnexpectedConnectionState","MediaDeviceFailure","RoomEvent","ParticipantEvent","EngineEvent","TrackEvent","getFailure","error","NotFound","PermissionDenied","DeviceInUse","Other","monitorFrequency","computeBitrate","currentStats","prevStats","bytesNow","bytesPrev","bytesReceived","bytesSent","timestamp","defaultId","DeviceManager","static","instance","getDevices","requestPermissions","devices","mediaDevices","enumerateDevices","some","device","noLabel","isRelevant","permissionsToAcquire","audio","getUserMedia","filter","deviceId","defaultDevice","groupId","temp","async","find","d","mediaDeviceKinds","sleep","duration","isFireFox","isWeb","isMobile","roDispatchCallback","entries","entry","handleResize","ioDispatchCallback","handleVisibilityChanged","resizeObserver","getResizeObserver","ResizeObserver","intersectionObserver","getIntersectionObserver","IntersectionObserver","rootMargin","emptyVideoStreamTrack","emptyAudioStreamTrack","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","init","eventsModule","events","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","m","existing","warning","newListener","unshift","warned","w","count","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","arg","removeEventListener","enumerable","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","pop","spliceOne","removeAllListeners","key","rawListeners","eventNames","recycledElements","Track","mediaTrack","attachedElements","isMuted","_currentBitrate","appVisibilityChangedListener","handleAppVisibilityChanged","mediaStreamTrack","Source","Unknown","isInBackground","visibilityState","currentBitrate","attach","element","elementType","Kind","Video","parentElement","createElement","includes","attachToElement","HTMLAudioElement","play","then","AudioPlaybackStarted","catch","AudioPlaybackFailed","ElementAttached","detach","detachTrack","idx","recycleElement","ElementDetached","detached","elm","stop","enable","disable","shouldCache","pause","mediaStream","existingTracks","srcObject","MediaStream","getAudioTracks","getVideoTracks","et","removeTrack","HTMLVideoElement","autoplay","playsInline","getTracks","kindToProto","k","Audio","kindFromProto","sourceToProto","s","Camera","Microphone","ScreenShare","ScreenShareAudio","sourceFromProto","streamStateFromProto","ProtoStreamState","Active","Paused","LocalTrack","constraints","_isUpstreamPaused","handleEnded","reacquireTrack","Ended","getConstraints","wasMuted","dimensions","getSettings","isUpstreamPaused","getInstance","normalizeDeviceId","setTrackMuted","replaceTrack","sender","el","restart","streamConstraints","newTrack","Muted","Unmuted","needsReAcquisition","readyState","UpstreamPaused","emptyTrack","AudioContext","oscillator","createOscillator","createMediaStreamDestination","connect","stream","getEmptyAudioStreamTrack","canvas","getContext","fillRect","emptyStream","captureStream","getEmptyVideoStreamTrack","UpstreamResumed","mergeDefaultOptions","options","audioDefaults","videoDefaults","opts","mergeObjectWithoutOverwriting","mainObject","objectToMerge","constraintsForOptions","videoOptions","resolution","getNewAudioContext","webkitAudioContext","LocalAudioTrack","stopOnMute","monitorSender","stats","getSenderStats","checkForSilence","setDeviceId","restartTrack","unmute","startMonitor","audioStats","getStats","streamId","packetsSent","packetsLost","roundTripTime","jitter","trackIsSilent","timeOffset","analyser","createAnalyser","fftSize","bufferLength","frequencyBinCount","dataArray","createMediaStreamSource","getByteTimeDomainData","someNoise","sample","close","detectSilence","AudioSilenceDetected","LocalVideoTrack","statsMap","Map","rid","totalBitrate","prev","isSimulcast","getParameters","encodings","signalClient","items","vs","frameHeight","frameWidth","firCount","pliCount","nackCount","framesSent","retransmittedPacketsSent","qualityLimitationReason","qualityLimitationResolutionChanges","r","remoteId","setPublishingQuality","maxQuality","qualities","q","setPublishingLayers","hasChanged","videoQualityForRid","subscribedQuality","scaleResolutionDownBy","maxBitrate","maxFrameRate","setParameters","RemoteTrack","streamState","setMuted","setMediaStream","onremovetrack","monitorReceiver","RemoteAudioTrack","getReceiverStats","elementVolume","setVolume","volume","getVolume","receiverStats","concealedSamples","concealmentEvents","silentConcealedSamples","silentConcealmentEvents","totalAudioEnergy","totalSamplesDuration","debounce","func","waitMilliseconds","timeoutId","isImmediate","maxWait","lastInvokeTime","Date","now","promises","nextInvokeTimeout","timeSinceLastInvocation","debouncedFunction","shouldCallNow","clearTimeout","cancel","reason","RemoteVideoTrack","adaptiveStreamSettings","elementInfos","isIntersecting","elementInfo","visible","visibilityChangedAt","updateVisibility","debouncedHandleResize","updateDimensions","isAdaptiveStream","observe","detachedElements","stopObservingElement","framesDecoded","framesDropped","framesReceived","packetsReceived","unobserve","lastVisibilityChange","reduce","isVisible","lastVisible","VisibilityChanged","maxWidth","maxHeight","pixelDensity","pixelDensityValue","devicePixelRatio","currentElementWidth","clientWidth","currentElementHeight","clientHeight","lastDimensions","VideoDimensionsChanged","TrackPublication","metadataMuted","handleMuted","handleUnmuted","trackName","setTrack","isEnabled","isSubscribed","audioTrack","videoTrack","updateInfo","simulcasted","trackInfo","SubscriptionStatus","LocalTrackPublication","ti","handleTrackEnded","pauseUpstream","resumeUpstream","VideoPreset","maxFramerate","frameRate","aspectRatio","AudioPresets","telephone","speech","music","VideoPresets","h90","h180","h216","h360","h540","h720","h1080","h1440","h2160","qvga","vga","qhd","hd","fhd","VideoPresets43","h120","h240","h480","ScreenSharePresets","h360fps3","h720fps5","h720fps15","h1080fps15","h1080fps30","hd_8","hd_15","fhd_15","fhd_30","Participant","audioLevel","isSpeaking","_connectionQuality","audioTracks","videoTracks","values","getTrack","pub","getTrackByName","isCameraEnabled","isMicrophoneEnabled","isScreenShareEnabled","participantInfo","setMetadata","setPermissions","md","changed","prevMetadata","MetadataChanged","ParticipantMetadataChanged","permissions","setIsSpeaking","speaking","lastSpokeAt","IsSpeakingChanged","setConnectionQuality","prevQuality","ProtoQuality","Excellent","Good","Poor","qualityFromProto","ConnectionQualityChanged","addTrackPublication","publication","TrackMuted","TrackUnmuted","mediaTrackToLocalTrack","presets169","presets43","presetsScreenShare","defaultSimulcastPresets169","defaultSimulcastPresets43","videoRids","computeVideoEncodings","isScreenShare","videoEncoding","screenShareEncoding","useSimulcast","presets","aspect","abs","presetsForResolution","preset","determineAppropriateEncoding","original","midPreset","sortPresets","screenShareSimulcastLayers","defaultSimulcastLayers","videoSimulcastLayers","lowPreset","encodingsFromPresets","computeDefaultScreenShareSimulcastPresets","fromPreset","fps","sort","a","aEnc","bEnc","RemoteTrackPublication","_allowed","currentVideoQuality","handleVisibilityChange","emitTrackUpdate","handleVideoDimensionsChange","videoDimensions","setSubscribed","subscribed","subscriptionStatus","Subscribed","NotAllowed","Unsubscribed","setEnabled","isManualOperationAllowed","setVideoQuality","setVideoDimensions","videoQuality","settings","UpdateSettings","RemoteParticipant","pi","rp","sendUpdateTrackSettings","pt","sendUpdateSubscription","TrackUnsubscribed","audioPublication","addSubscribedMediaTrack","triesLeft","getTrackPublication","startsWith","TrackSubscriptionFailed","TrackSubscribed","hasMetadata","alreadyHasMetadata","validTracks","newTracks","TrackPublished","has","unpublishTrack","sendUnpublish","delete","TrackUnpublished","event","_len","_key","LocalParticipant","engine","pendingPublishing","Set","onTrackUnmuted","onTrackMuted","updateMuteStatus","onTrackUpstreamPaused","onTrackUpstreamResumed","handleSubscribedQualityUpdate","roomOptions","dynacast","handleLocalTrackUnpublished","unpublished","onTrackUnpublish","client","onRemoteMuteChanged","onSubscribedQualityUpdate","onLocalTrackUnpublished","lastCameraError","cameraError","lastMicrophoneError","microphoneError","setCameraEnabled","setTrackEnabled","setMicrophoneEnabled","setScreenShareEnabled","prevPermissions","ParticipantPermissionsChanged","localTrack","createTracks","createScreenTracks","publishTrack","MediaDevicesError","all","audioCaptureDefaults","videoCaptureDefaults","isAudio","trackConstraints","conOrBool","videoConstraints","getDisplayMedia","screenVideo","localTracks","screenAudio","_objectSpread","publishDefaults","MediaStreamTrack","existingPublication","stopMicTrackOnMute","req","dtx","scale","videoLayersFromEncodings","audioBitrate","publisher","transceiverInit","direction","sendEncodings","transceiver","pc","addTransceiver","negotiate","videoCodec","setPreferredCodec","LocalTrackPublished","stopOnUnpublish","getPublicationForTrack","stopLocalTrackOnUnpublish","getSenders","LocalTrackUnpublished","unpublishTracks","publications","data","destination","dest","packet","sendDataPacket","setTrackSubscriptionPermissions","allParticipantsAllowed","participantTrackPermissions","sendUpdateSubscriptionPermissions","perms","allowAll","allowedTrackSids","trackPermissionToProto","RTCRtpSender","cap","getCapabilities","selected","codecs","codec","matchesVideoCodec","sdpFmtpLine","setCodecPreferences","publishedTracksInfo","infos","dataChannelsInfo","getInfo","dc","dataChannelForKind","Queue","queue","running","enqueue","cb","dequeue","isRunning","isEmpty","logDisabled_","deprecationWarnings_","extractVersion","uastring","expr","match","wrapPeerConnectionEvent","eventNameToWrap","wrapper","RTCPeerConnection","proto","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","configurable","disableLog","disableWarnings","deprecated","oldMethod","newMethod","detectBrowser","mozGetUserMedia","webkitGetUserMedia","isSecureContext","webkitRTCPeerConnection","RTCIceGatherer","supportsUnifiedPlan","RTCRtpTransceiver","compactObject","accumulator","isObj","isEmptyObject","assign","walkStats","base","resultSet","endsWith","filterStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","trackId","logging","utils","shimGetUserMedia","browserDetails","constraintsToChrome_","mandatory","optional","cc","ideal","exact","oldname_","prefix","oc","mix","advanced","shimConstraints_","JSON","parse","stringify","remap","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","dev","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","onSuccess","onError","origGetUserMedia","cs","DOMException","shimMediaStream","webkitMediaStream","shimOnTrack","_ontrack","f","origSetRemoteDescription","setRemoteDescription","_ontrackpoly","te","getReceivers","Event","streams","dispatchEvent","shimGetSendersWithDtmf","shimSenderWithDtmf","dtmf","_dtmf","createDTMFSender","_pc","_senders","origAddTrack","origRemoveTrack","origAddStream","addStream","origRemoveStream","removeStream","origGetSenders","senders","shimGetStats","origGetStats","selector","onSucc","onErr","fixChromeStats_","standardReport","report","standardStats","localcandidate","remotecandidate","names","stat","makeMapStats","successCallbackWrapper_","shimSenderReceiverGetStats","RTCRtpReceiver","origGetReceivers","receivers","srcElement","shimAddTrackRemoveTrackWithNative","getLocalStreams","_shimmedLocalStreams","existingSenders","newSenders","newSender","shimAddTrackRemoveTrack","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","replaceInternalStreamId","description","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","replaceExternalStreamId","signalingState","alreadyExists","oldStream","nativeMethod","methodObj","desc","origSetLocalDescription","setLocalDescription","origLocalDescription","getOwnPropertyDescriptor","streamid","shimPeerConnection","RTCIceCandidate","fixNegotiationNeeded","getConfiguration","sdpSemantics","getSourceId","sourceId","widthSpecified","heightSpecified","frameRateSpecified","chromeMediaSource","chromeMediaSourceId","nativeGetUserMedia","nativeGetSettings","applyConstraints","nativeApplyConstraints","RTCTrackEvent","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","DataChannel","RTCDataChannel","shimAddTransceiver","origAddTransceiver","setParametersPromises","initParameters","shouldPerformCheck","encodingParam","parseFloat","shimGetParameters","origGetParameters","shimCreateOffer","origCreateOffer","createOffer","finally","shimCreateAnswer","origCreateAnswer","createAnswer","preferredMediaSource","mediaSource","shimLocalStreamsAPI","_localStreams","_addTrack","shimRemoteStreamsAPI","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","shimCallbacksAPI","addIceCandidate","successCallback","failureCallback","promise","withCallback","candidate","_getUserMedia","shimConstraints","errcb","shimRTCIceServerUrls","OrigPeerConnection","pcConfig","pcConstraints","newIceServers","server","url","generateCertificate","shimTrackEventTransceiver","shimCreateOfferLegacy","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","setDirection","offerToReceiveVideo","videoTransceiver","shimAudioContext","SDPUtils","random","substr","localCName","generateIdentifier","splitLines","blob","trim","split","line","splitSections","part","getDescription","sections","getMediaSections","matchPrefix","parseCandidate","foundation","component","priority","ip","port","relatedAddress","relatedPort","tcpType","ufrag","usernameFragment","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","preferredPayloadType","parseExtmap","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mediaSection","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","caps","maxptime","extension","parseRtpEncodingParameters","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","parseMLine","maxSizeLine","maxMessageSize","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","sctp","output","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","sessionId","getDirection","getKind","isRejected","parseOLine","sessionVersion","netType","addressType","isValidSDP","shimRTCIceCandidate","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","augmentedCandidate","sdpMid","sdpMLineIndex","writable","shimMaxMessageSize","_sctp","sctpInDescription","mLine","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","isFirefox","canSendMMS","remoteMMS","POSITIVE_INFINITY","shimSendThrowTypeError","wrapDcSend","origDataChannelSend","send","origCreateDataChannel","createDataChannel","dataChannel","channel","shimConnectionState","completed","checking","iceConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","removeExtmapAllowMixed","nativeSRD","shimAddIceCandidateNullOrEmpty","nativeAddIceCandidate","shimParameterlessSetLocalDescription","nativeSetLocalDescription","shimChrome","shimFirefox","shimSafari","adapter","commonShim","chromeShim","browserShim","firefoxShim","safariShim","adapterFactory","passThroughQueueSignals","SignalClient","useJSON","isConnected","isReconnecting","requestQueue","token","autoSubscribe","publishOnly","adaptiveStream","reconnect","clientInfo","URLSearchParams","createConnectionParams","ws","WebSocket","binaryType","onerror","handleWSError","ev","resp","fetch","ok","msg","text","onopen","onmessage","ArrayBuffer","signalLatency","handleSignalResponse","onclose","onClose","sendOffer","sendRequest","toProtoSessionDescription","sendAnswer","sendIceCandidate","sendMuteTrack","sendAddTrack","sendSyncState","sync","sendUpdateVideoLayers","sendSimulateScenario","scenario","sendLeave","canQueue","canPass","canPassThroughQueue","sd","fromProtoSessionDescription","onAnswer","onOffer","onTrickle","onParticipantUpdate","onLocalTrackPublished","onSpeakersChanged","onLeave","onRoomUpdate","onConnectionQuality","onStreamStateUpdate","onSubscriptionPermissionUpdate","onTokenRefresh","setReconnected","run","rsd","PCTransport","config","pendingCandidates","restartingIce","renegotiate","createAndSendOffer","isICEConnected","remoteDescription","iceRestart","currentSD","lossyDataChannel","reliableDataChannel","maxICEConnectTimeout","PCState","RTCEngine","rtcConfig","pcState","New","isClosed","pendingTrackResolvers","hasPublished","reconnectAttempts","reconnectStart","fullReconnectOnNext","handleDataChannel","_ref","reliableDCSub","lossyDCSub","handleDataMessage","Blob","arrayBuffer","dp","ActiveSpeakersUpdate","DataPacketReceived","handleDataError","channelKind","currentTarget","maxRetransmits","ErrorEvent","handleDisconnect","connection","delay","restartConnection","recoverable","SignalReconnectError","maxReconnectRetries","Disconnected","signalOpts","joinResponse","subscriber","dataSubscriberReadyState","connectedServerAddress","connectedServerAddr","rtcIceServers","iceServer","rtcIceServer","continualGatheringPolicy","TransportsCreated","onicecandidate","primaryPC","secondaryPC","ondatachannel","onconnectionstatechange","getConnectedAddress","shouldEmit","Connected","ontrack","MediaTrackAdded","onaddstream","lossyDC","ordered","reliableDC","RTCSdpType","Restarting","waitForPCConnected","Restarted","Resuming","SignalResumed","Resumed","startTime","Reconnecting","ensurePublisherConnected","targetChannel","endTime","getTime","selectedCandidatePairId","candidatePairs","candidates","selectedID","remoteCandidateId","autoGainControl","channelCount","echoCancellation","noiseSuppression","RoomState","_this","activeSpeakers","audioEnabled","createEngine","acquireAudioContext","connOptions","localParticipant","getOrCreateParticipant","StateChanged","connectTimeout","onBeforeUnload","handleDeviceChange","disconnect","stopTracks","handleRestarting","handleParticipantDisconnected","handleRestarted","Reconnected","handleParticipantUpdates","localPubs","participantInfos","remoteParticipant","isNewParticipant","ParticipantConnected","handleActiveSpeakersUpdate","seenSids","ActiveSpeakersChanged","handleSpeakersChanged","speakerUpdates","lastSpeakers","handleStreamStateUpdate","TrackStreamStateChanged","handleSubscriptionPermissionUpdate","TrackSubscriptionPermissionChanged","handleDataPacket","userPacket","DataReceived","handleAudioPlaybackStarted","canPlaybackAudio","AudioPlaybackStatusChanged","handleAudioPlaybackFailed","MediaDevicesChanged","handleRoomUpdate","RoomMetadataChanged","handleConnectionQualityUpdate","expSignalLatency","onTrackAdded","updateSubscriptions","getLocalDevices","getParticipantByIdentity","simulateScenario","elements","setSinkId","packed","unpackStreamId","participantId","shouldStopTracks","clear","audioContext","ParticipantDisconnected","createParticipant","fromParticipantInfo","trackPublication","localDescription","previousSdp","sendUnsub","createLocalTracks","autoManageVideo","logLevel","publishAudio","publishVideo","enableCameraAndMicrophone","errKind","audioErr","originalFactory","rawMethod","configLevel","needLog","silent"],"mappings":"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"}