@100mslive/hms-video-store 0.2.65 → 0.2.69

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.
@@ -1 +1 @@
1
- {"version":3,"file":"hms-video-store.cjs.development.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/core/schema/room.ts","../src/core/schema/schema.ts","../src/core/schema/message.ts","../src/core/schema/notification.ts","../src/core/schema/playlist.ts","../src/core/hmsSDKStore/sdkUtils/storeMergeUtils.ts","../src/core/hmsSDKStore/adapter.ts","../src/core/selectors/selectorUtils.ts","../src/core/selectors/selectors.ts","../src/core/selectors/playlistselectors.ts","../src/common/ui-logger.ts","../src/core/selectors/selectorsByID.ts","../src/core/selectors/derivedSelectors.ts","../src/core/selectors/selectorsByReference.ts","../src/core/hmsSDKStore/sdkUtils/sdkUtils.ts","../src/core/hmsSDKStore/HMSPlaylist.ts","../src/core/hmsSDKStore/HMSSDKActions.ts","../src/core/hmsSDKStore/common/mapping.ts","../src/core/hmsSDKStore/HMSNotifications.ts","../src/core/hmsSDKStore/HMSReactiveStore.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import { HMSRecording, HMSRTMP } from '@100mslive/hms-video';\nimport { HMSPeerID } from './peer';\n\nexport type HMSRoomID = string;\n\nexport enum HMSRoomState {\n Disconnected = 'Disconnected',\n Preview = 'Preview',\n Connecting = 'Connecting',\n Connected = 'Connected',\n Reconnecting = 'Reconnecting',\n Failed = 'Failed',\n}\n\nexport interface HMSRoom {\n id: HMSRoomID;\n name: string;\n isConnected?: boolean;\n peers: HMSPeerID[];\n localPeer: HMSPeerID;\n shareableLink: string;\n hasWaitingRoom: boolean;\n roomState: HMSRoomState;\n recording: HMSRecording;\n rtmp: HMSRTMP;\n}\n","import { HMSPeer, HMSPeerID, HMSTrackID, HMSTrack, HMSSpeaker } from './peer';\nimport { HMSMessage, HMSMessageID } from './message';\nimport { HMSRoom, HMSRoomState } from './room';\nimport { HMSMediaSettings } from './settings';\nimport { DeviceMap } from '../hmsSDKStore/sdkTypes';\nimport { HMSRole } from './role';\nimport { HMSRoleChangeStoreRequest } from './requests';\nimport { HMSException } from './error';\nimport { HMSPlaylist } from './playlist';\n\n/*\n * Defines the schema of the central store. UI Components are aware of the presence\n * of this central store. This is the global state - the single source of immutable truth.\n */\nexport interface HMSStore {\n room: HMSRoom;\n peers: Record<HMSPeerID, HMSPeer>;\n speakers: Record<HMSTrackID, HMSSpeaker>;\n tracks: Record<HMSTrackID, HMSTrack>;\n playlist: HMSPlaylist<any>;\n messages: {\n byID: Record<HMSMessageID, HMSMessage>;\n allIDs: HMSMessageID[];\n };\n settings: HMSMediaSettings;\n devices: DeviceMap;\n roles: Record<string, HMSRole>;\n roleChangeRequests: HMSRoleChangeStoreRequest[];\n errors: HMSException[]; // for the convenience of debugging and seeing any error in devtools\n}\n\n/**\n * @internal\n */\nexport const createDefaultStoreState = (): HMSStore => {\n return {\n room: {\n id: '',\n isConnected: false,\n name: '',\n peers: [],\n shareableLink: '',\n localPeer: '',\n hasWaitingRoom: false,\n roomState: HMSRoomState.Disconnected,\n recording: {\n browser: {\n running: false,\n },\n server: {\n running: false,\n },\n },\n rtmp: {\n running: false,\n },\n },\n peers: {},\n tracks: {},\n playlist: {\n audio: {\n list: {},\n selection: { id: '', hasPrevious: false, hasNext: false },\n progress: 0,\n volume: 0,\n currentTime: 0,\n },\n video: {\n list: {},\n selection: { id: '', hasPrevious: false, hasNext: false },\n progress: 0,\n volume: 0,\n currentTime: 0,\n },\n },\n messages: { byID: {}, allIDs: [] },\n speakers: {},\n settings: {\n audioInputDeviceId: '',\n audioOutputDeviceId: '',\n videoInputDeviceId: '',\n },\n devices: {\n audioInput: [],\n audioOutput: [],\n videoInput: [],\n },\n roles: {},\n roleChangeRequests: [],\n errors: [],\n };\n};\n","import { HMSPeerID } from './peer';\nimport { HMSRoleName } from './role';\n\nexport type HMSMessageID = string;\n\n/**\n * @internal\n */\nexport enum HMSMessageType {\n CHAT = 'chat',\n}\n\nexport interface HMSMessage {\n id: HMSMessageID;\n sender: HMSPeerID;\n senderName: string;\n senderUserId?: string;\n senderRole?: string;\n recipientPeer?: HMSPeerID;\n recipientRoles?: HMSRoleName[];\n time: Date;\n read: boolean;\n type: string;\n message: any;\n}\n\n/**\n * @internal\n */\nexport interface HMSMessageInput {\n recipientPeer?: HMSPeerID;\n recipientRoles?: HMSRoleName[];\n type?: string;\n message: any;\n}\n","export interface HMSNotification {\n id: number;\n type: string;\n message: string;\n /**\n * HMSPeer | HMSTrack | HMSMessage | HMSException\n */\n data?: any;\n severity?: HMSNotificationSeverity;\n}\nexport enum HMSNotificationSeverity {\n INFO = 'info',\n ERROR = 'error',\n CRITICAL = 'critical',\n}\n\nexport enum HMSNotificationTypes {\n PEER_JOINED = 'PEER_JOINED',\n PEER_LEFT = 'PEER_LEFT',\n NEW_MESSAGE = 'NEW_MESSAGE',\n ERROR = 'ERROR',\n RECONNECTING = 'RECONNECTING',\n RECONNECTED = 'RECONNECTED',\n TRACK_ADDED = 'TRACK_ADDED',\n TRACK_REMOVED = 'TRACK_REMOVED',\n TRACK_MUTED = 'TRACK_MUTED',\n TRACK_UNMUTED = 'TRACK_UNMUTED',\n ROLE_CHANGE_REQUEST = 'ROLE_CHANGE_REQUEST',\n ROLE_UPDATED = 'ROLE_UPDATED',\n CHANGE_TRACK_STATE_REQUEST = 'CHANGE_TRACK_STATE_REQUEST',\n CHANGE_MULTI_TRACK_STATE_REQUEST = 'CHANGE_MULTI_TRACK_STATE_REQUEST',\n ROOM_ENDED = 'ROOM_ENDED',\n REMOVED_FROM_ROOM = 'REMOVED_FROM_ROOM',\n DEVICE_CHANGE_UPDATE = 'DEVICE_CHANGE_UPDATE',\n}\n","import { HMSStore } from '../schema';\n\nexport enum HMSPlaylistType {\n audio = 'audio',\n video = 'video',\n}\nexport interface HMSPlaylistItem<T> {\n name: string;\n id: string;\n metadata?: T;\n url: string;\n type: HMSPlaylistType;\n duration?: number;\n playing: boolean;\n selected: boolean;\n}\n\nexport interface HMSPlaylistSelection {\n id: string;\n hasPrevious: boolean;\n hasNext: boolean;\n}\n\nexport interface HMSPlaylist<T> {\n audio: {\n list: Record<string, HMSPlaylistItem<T>>;\n selection: HMSPlaylistSelection;\n progress: number;\n volume: number;\n currentTime: number;\n };\n video: {\n list: Record<string, HMSPlaylistItem<T>>;\n selection: HMSPlaylistSelection;\n progress: number;\n volume: number;\n currentTime: number;\n };\n}\n\nexport interface IHMSPlaylistActions {\n /**\n * Pass the id of the item to be played\n * @param {string} id - id of playlist item\n */\n play(id: string): Promise<void>;\n /**\n * Pauses current playing item\n */\n pause(): Promise<void>;\n /**\n * PlayNext\n */\n playNext(): Promise<void>;\n /**\n * PlayPrevious\n */\n playPrevious(): Promise<void>;\n /**\n * seek passing seekValue - this is relative to current position\n * @param {number} seekValue - number in seconds to move forwards(pass negative values to move backwards)\n */\n seek(seekValue: number): void;\n /**\n * seek passing seekValue - seekValue will be absolute\n * @param {number} seekValue - value in seconds of absolute position in the playlist item duration\n */\n seekTo(seekValue: number): void;\n /**\n * set volume passing volume\n * @param {number} volume - number between 0-100\n */\n setVolume(volume: number): void;\n /**\n * pass list to set playlist\n * @param {HMSPlaylistItem[]} - list of playlist items\n */\n setList<T>(list: HMSPlaylistItem<T>[]): void;\n /**\n * Stop the current playback and remove the tracks\n */\n stop(): Promise<void>;\n}\n\nexport interface HMSPlaylistSelector {\n list: <T>(store: HMSStore) => HMSPlaylistItem<T>[];\n /**\n * This returns playlist selection with id, hasNext, hasPrev\n * @returns {HMSPlaylistSelection}\n */\n selection: (store: HMSStore) => HMSPlaylistSelection;\n /**\n * This returns playlist item for corresponding Id in selection\n * @returns {HMSPlaylistItem}\n */\n selectedItem: <T>(store: HMSStore) => HMSPlaylistItem<T>;\n progress: (store: HMSStore) => number;\n volume: (store: HMSStore) => number;\n currentTime: (store: HMSStore) => number;\n}\n","import { HMSPeer, HMSPeerID, HMSTrack, HMSTrackID } from '../../schema';\nimport { HMSTrack as SDKHMSTrack } from '@100mslive/hms-video';\n\n/**\n * updates draftPeers with newPeers ensuring minimal reference changes\n * @remarks\n * This is mutable and impure function, it modifies the passed in data to ensure\n * minimal reference changes\n * @param draftPeers the current peers object in store, an immer draft object\n * @param newPeers the latest update which needs to be stored\n * @param newHmsTracks this will be update if required\n * @param newHmsSDkTracks this is future value of local hms tacks map\n */\nexport const mergeNewPeersInDraft = (\n draftPeers: Record<HMSPeerID, HMSPeer>,\n newPeers: Record<HMSPeerID, Partial<HMSPeer>>,\n newHmsTracks: Record<HMSTrackID, Partial<HMSTrack>>,\n newHmsSDkTracks: Record<HMSTrackID, SDKHMSTrack>,\n) => {\n const peerIDs = union(Object.keys(draftPeers), Object.keys(newPeers));\n for (let peerID of peerIDs) {\n const oldPeer = draftPeers[peerID];\n const newPeer = newPeers[peerID];\n if (isEntityUpdated(oldPeer, newPeer)) {\n if (areArraysEqual(oldPeer.auxiliaryTracks, newPeer.auxiliaryTracks)) {\n newPeer.auxiliaryTracks = oldPeer.auxiliaryTracks;\n }\n handleLocalVideoReplaceTrack(oldPeer, newPeer, newHmsTracks, newHmsSDkTracks);\n Object.assign(oldPeer, newPeer);\n } else if (isEntityRemoved(oldPeer, newPeer)) {\n delete draftPeers[peerID];\n } else if (isEntityAdded(oldPeer, newPeer)) {\n draftPeers[peerID] = newPeer as HMSPeer;\n }\n }\n};\n\nexport const mergeNewTracksInDraft = (\n draftTracks: Record<HMSTrackID, HMSTrack>,\n newTracks: Record<HMSTrackID, Partial<HMSTrack>>,\n) => {\n const trackIDs = union(Object.keys(draftTracks), Object.keys(newTracks));\n for (let trackID of trackIDs) {\n const oldTrack = draftTracks[trackID];\n const newTrack = newTracks[trackID];\n if (isEntityUpdated(oldTrack, newTrack)) {\n mergeTrackArrayFields(oldTrack, newTrack);\n Object.assign(oldTrack, newTrack);\n } else if (isEntityRemoved(oldTrack, newTrack)) {\n delete draftTracks[trackID];\n } else if (isEntityAdded(oldTrack, newTrack)) {\n draftTracks[trackID] = newTrack as HMSTrack;\n }\n }\n};\n\n/**\n * array's are usually created with new reference, avoid that update if both arrays are same\n */\nconst mergeTrackArrayFields = (oldTrack: HMSTrack, newTrack: Partial<HMSTrack>) => {\n if (oldTrack.plugins && areArraysEqual(oldTrack.plugins, newTrack.plugins)) {\n newTrack.plugins = oldTrack.plugins;\n }\n if (\n oldTrack.layerDefinitions &&\n areArraysEqual(oldTrack.layerDefinitions, newTrack.layerDefinitions)\n ) {\n newTrack.layerDefinitions = oldTrack.layerDefinitions;\n }\n};\n\nconst isEntityUpdated = <T>(oldItem: T, newItem: T) => oldItem && newItem;\nconst isEntityRemoved = <T>(oldItem: T, newItem: T) => oldItem && !newItem;\nconst isEntityAdded = <T>(oldItem: T, newItem: T) => !oldItem && newItem;\n\n// eslint-disable-next-line complexity\nexport const areArraysEqual = <T>(arr1: T[], arr2?: T[]): boolean => {\n if (arr1 === arr2 || (arr1.length === 0 && arr2?.length === 0)) {\n // reference check\n return true;\n }\n if (!arr1 || !arr2 || !(arr1.length === arr2.length)) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n};\n\nconst union = <T>(arr1: T[], arr2: T[]): T[] => {\n const set: Set<T> = new Set();\n for (let elem of arr1) {\n set.add(elem);\n }\n for (let elem of arr2) {\n set.add(elem);\n }\n return Array.from(set);\n};\n\n/**\n * on replace track, use prev video track id in peer object, this is because we\n * don't want the peer or peers object reference to change, the fact that the video\n * track is changed on mute/unmute because of replace track is abstracted\n */\nfunction handleLocalVideoReplaceTrack(\n oldPeer: HMSPeer,\n newPeer: Partial<HMSPeer>,\n newHmsTracks: Record<HMSTrackID, Partial<HMSTrack>>,\n newHmsSDkTracks: Record<HMSTrackID, SDKHMSTrack>,\n) {\n if (\n oldPeer.isLocal &&\n oldPeer.videoTrack &&\n newPeer.videoTrack &&\n oldPeer.videoTrack !== newPeer.videoTrack\n ) {\n newHmsSDkTracks[oldPeer.videoTrack] = newHmsSDkTracks[newPeer.videoTrack];\n delete newHmsSDkTracks[newPeer.videoTrack];\n newHmsTracks[oldPeer.videoTrack] = newHmsTracks[newPeer.videoTrack];\n newHmsTracks[oldPeer.videoTrack].id = oldPeer.videoTrack;\n delete newHmsTracks[newPeer.videoTrack];\n newPeer.videoTrack = oldPeer.videoTrack;\n }\n}\n","import {\n HMSLocalAudioTrack as SDKHMSLocalAudioTrack,\n HMSLocalVideoTrack as SDKHMSLocalVideoTrack,\n HMSRemoteAudioTrack as SDKHMSRemoteAudioTrack,\n HMSRemoteVideoTrack as SDKHMSRemoteVideoTrack,\n HMSRoleChangeRequest as SDKHMSRoleChangeRequest,\n HMSTrack as SDKHMSTrack,\n} from '@100mslive/hms-video';\nimport {\n HMSDeviceChangeEvent,\n HMSException,\n HMSMessage,\n HMSPeer,\n HMSPeerID,\n HMSPlaylistItem,\n HMSPlaylistType,\n HMSRole,\n HMSRoleChangeStoreRequest,\n HMSRoleName,\n HMSRoom,\n HMSTrack,\n} from '../schema';\n\nimport * as sdkTypes from './sdkTypes';\nimport { areArraysEqual } from './sdkUtils/storeMergeUtils';\n\nexport class SDKToHMS {\n static convertPeer(sdkPeer: sdkTypes.HMSPeer): Partial<HMSPeer> & Pick<HMSPeer, 'id'> {\n return {\n id: sdkPeer.peerId,\n name: sdkPeer.name,\n roleName: sdkPeer.role?.name,\n isLocal: sdkPeer.isLocal,\n videoTrack: sdkPeer.videoTrack?.trackId,\n audioTrack: sdkPeer.audioTrack?.trackId,\n auxiliaryTracks: sdkPeer.auxiliaryTracks.map(t => t.trackId),\n customerUserId: sdkPeer.customerUserId,\n customerDescription: sdkPeer.customerDescription,\n };\n }\n\n static convertTrack(sdkTrack: SDKHMSTrack, peerId?: HMSPeerID): HMSTrack {\n const track: HMSTrack = {\n id: sdkTrack.trackId,\n source: sdkTrack.source,\n type: sdkTrack.type,\n enabled: sdkTrack.enabled,\n displayEnabled: sdkTrack.enabled,\n peerId: sdkTrack.peerId || peerId,\n };\n this.enrichTrack(track, sdkTrack);\n return track;\n }\n\n static enrichTrack(track: HMSTrack, sdkTrack: SDKHMSTrack) {\n const mediaSettings = sdkTrack.getMediaTrackSettings();\n if (track.source === 'screen' && track.type === 'video') {\n // @ts-ignore\n track.displaySurface = mediaSettings.displaySurface;\n }\n track.height = mediaSettings.height;\n track.width = mediaSettings.width;\n track.deviceID = mediaSettings.deviceId;\n if (sdkTrack instanceof SDKHMSRemoteAudioTrack) {\n track.volume = sdkTrack.getVolume() || 0;\n }\n SDKToHMS.enrichVideoTrack(track, sdkTrack);\n SDKToHMS.enrichPluginsDetails(track, sdkTrack);\n }\n\n static enrichVideoTrack(track: HMSTrack, sdkTrack: SDKHMSTrack) {\n if (sdkTrack instanceof SDKHMSRemoteVideoTrack) {\n track.layer = sdkTrack.getSimulcastLayer();\n track.degraded = sdkTrack.degraded;\n if (!areArraysEqual(sdkTrack.getSimulcastDefinitions(), track.layerDefinitions)) {\n track.layerDefinitions = sdkTrack.getSimulcastDefinitions();\n }\n }\n }\n\n static enrichPluginsDetails(track: HMSTrack, sdkTrack: SDKHMSTrack) {\n if (sdkTrack instanceof SDKHMSLocalVideoTrack || sdkTrack instanceof SDKHMSLocalAudioTrack) {\n if (!areArraysEqual(sdkTrack.getPlugins(), track.plugins)) {\n track.plugins = sdkTrack.getPlugins();\n }\n }\n }\n\n static convertRoom(sdkRoom: sdkTypes.HMSRoom): Partial<HMSRoom> {\n return {\n id: sdkRoom.id,\n name: sdkRoom.name,\n localPeer: sdkRoom.localPeer?.peerId ?? '',\n hasWaitingRoom: sdkRoom.hasWaitingRoom,\n shareableLink: sdkRoom.shareableLink,\n recording: {\n browser: {\n running: !!sdkRoom.recording?.browser.running,\n },\n server: { running: !!sdkRoom.recording?.server.running },\n },\n rtmp: { running: !!sdkRoom.rtmp?.running },\n };\n }\n\n static convertMessage(\n sdkMessage: sdkTypes.HMSMessage,\n ): Partial<HMSMessage> & Pick<HMSMessage, 'sender'> {\n return {\n sender: sdkMessage.sender.peerId,\n senderName: sdkMessage.sender.name,\n senderRole: sdkMessage.sender.role?.name,\n senderUserId: sdkMessage.sender.customerUserId,\n recipientPeer: sdkMessage.recipientPeer?.peerId,\n recipientRoles: sdkMessage.recipientRoles?.map(role => role.name),\n time: sdkMessage.time,\n type: sdkMessage.type,\n message: sdkMessage.message,\n };\n }\n\n static convertRoles(sdkRoles: HMSRole[]): Record<HMSRoleName, HMSRole> {\n const roles: Record<HMSRoleName, HMSRole> = {};\n if (sdkRoles) {\n sdkRoles.forEach(role => {\n roles[role.name] = role;\n });\n }\n return roles;\n }\n\n static convertRoleChangeRequest(req: SDKHMSRoleChangeRequest): HMSRoleChangeStoreRequest {\n return {\n requestedBy: req.requestedBy.peerId,\n roleName: req.role.name,\n token: req.token,\n };\n }\n\n static convertException(sdkException: sdkTypes.HMSException): HMSException {\n return {\n code: sdkException.code,\n action: sdkException.action,\n name: sdkException.name,\n message: sdkException.message,\n description: sdkException.description,\n isTerminal: sdkException.isTerminal,\n nativeError: sdkException.nativeError,\n timestamp: new Date(),\n };\n }\n\n static convertDeviceChangeUpdate(\n sdkDeviceChangeEvent: sdkTypes.HMSDeviceChangeEvent,\n ): HMSDeviceChangeEvent {\n const convertedData: HMSDeviceChangeEvent = {\n devices: sdkDeviceChangeEvent.devices,\n selection: sdkDeviceChangeEvent.selection,\n type: sdkDeviceChangeEvent.type,\n };\n if (sdkDeviceChangeEvent.error) {\n convertedData.error = this.convertException(sdkDeviceChangeEvent.error);\n }\n return convertedData;\n }\n\n static convertPlaylist(playlistManager: sdkTypes.HMSPlaylistManager) {\n const audioPlaylist = this.getConvertedPlaylistType(playlistManager, HMSPlaylistType.audio);\n const videoPlaylist = this.getConvertedPlaylistType(playlistManager, HMSPlaylistType.video);\n return { audio: audioPlaylist, video: videoPlaylist };\n }\n\n private static getConvertedPlaylistType(\n playlistManager: sdkTypes.HMSPlaylistManager,\n type: HMSPlaylistType,\n ) {\n const convertedPlaylist: Record<string, HMSPlaylistItem<any>> = {};\n const currentSelection = playlistManager.getCurrentSelection(type);\n const progress = playlistManager.getCurrentProgress(type);\n const isPlaying = playlistManager.isPlaying(type);\n const volume = playlistManager.getVolume(type);\n const list = playlistManager.getList(type);\n const currentIndex = playlistManager.getCurrentIndex(type);\n\n playlistManager.getList(type).forEach(playlistItem => {\n const isSelected = playlistItem.url === currentSelection?.url;\n convertedPlaylist[playlistItem.id] = {\n ...playlistItem,\n type: playlistItem.type as HMSPlaylistType,\n selected: isSelected,\n playing: isSelected && isPlaying,\n };\n });\n return {\n list: convertedPlaylist,\n selection: {\n id: currentSelection?.id,\n hasPrevious: currentIndex > 0,\n hasNext: currentIndex < list.length - 1,\n },\n progress,\n volume,\n currentTime: playlistManager.getCurrentTime(type),\n };\n }\n\n static convertRecordingRTMPState(\n recording: sdkTypes.HMSRecording | undefined,\n rtmp: sdkTypes.HMSRTMP | undefined,\n ): { recording: sdkTypes.HMSRecording; rtmp: sdkTypes.HMSRTMP } {\n return {\n recording: {\n browser: {\n running: !!recording?.browser?.running,\n },\n server: { running: !!recording?.server?.running },\n },\n rtmp: { running: !!rtmp?.running },\n };\n }\n}\n","import { HMSPeer, HMSStore, HMSTrack, HMSTrackID } from '../schema';\n\ntype trackCheck = (track: HMSTrack | undefined) => boolean | undefined;\n\nexport function getPeerTracksByCondition(\n tracks: Record<HMSTrackID, HMSTrack>,\n peer: HMSPeer | null,\n trackCheckFn: trackCheck = isScreenShare,\n) {\n let videoTrack = undefined;\n let audioTrack = undefined;\n if (peer) {\n for (let trackID of peer.auxiliaryTracks) {\n const track = tracks[trackID];\n if (trackCheckFn(track)) {\n audioTrack = isAudio(track) ? track : audioTrack;\n videoTrack = isVideo(track) ? track : videoTrack;\n }\n }\n }\n return { video: videoTrack, audio: audioTrack };\n}\n\nexport function isAudio(track: HMSTrack | undefined) {\n return track && track.type === 'audio';\n}\n\nexport function isVideo(track: HMSTrack | undefined) {\n return track && track.type === 'video';\n}\n\nexport function isScreenShare(track: HMSTrack | undefined) {\n return track && track.source === 'screen';\n}\n\nexport function isAudioPlaylist(track: HMSTrack | undefined) {\n return track && track.source === 'audioplaylist';\n}\n\nexport function isVideoPlaylist(track: HMSTrack | undefined) {\n return track && track.source === 'videoplaylist';\n}\n\nexport function isDegraded(track: HMSTrack | undefined) {\n return Boolean(track?.degraded);\n}\n\nexport function isTrackEnabled(store: HMSStore, trackID?: string) {\n if (trackID && store.tracks[trackID]) {\n return store.tracks[trackID].enabled;\n }\n return false;\n}\n\n/**\n * Should UI show the video track as enabled\n */\nexport function isTrackDisplayEnabled(store: HMSStore, trackID?: string) {\n if (trackID && store.tracks[trackID]) {\n return store.tracks[trackID].displayEnabled;\n }\n return false;\n}\n","import { HMSMessage, HMSPeer, HMSPeerID, HMSRoom, HMSRoomState, HMSStore } from '../schema';\nimport { createSelector } from 'reselect';\n// noinspection ES6PreferShortImport\nimport { HMSRole } from '../hmsSDKStore/sdkTypes';\nimport {\n getPeerTracksByCondition,\n isDegraded,\n isVideoPlaylist,\n isTrackDisplayEnabled,\n isTrackEnabled,\n} from './selectorUtils';\n\n/**\n * Select the current {@link HMSRoom} object to which you are connected.\n * @param store\n */\nexport const selectRoom = (store: HMSStore): HMSRoom => store.room;\n\n/**\n * @internal\n */\nexport const selectPeersMap = (store: HMSStore): Record<HMSPeerID, HMSPeer> => store.peers;\n\n/**\n * @internal\n */\nexport const selectMessagesMap = (store: HMSStore) => store.messages.byID;\n\n/**\n * Select IDs of messages you've sent or received sorted chronologically.\n */\nexport const selectMessageIDsInOrder = (store: HMSStore) => store.messages.allIDs;\n\n/**\n * @internal\n */\nexport const selectTracksMap = (store: HMSStore) => store.tracks;\n\n/**\n * Select your media settings\n * i.e., choosen audio input device, audio output device and video input device.\n * @param store\n */\nexport const selectLocalMediaSettings = (store: HMSStore) => store.settings;\n\n/**\n * Select the available audio input, audio output and video input devices on your machine.\n * @param store\n * @returns An object of array of available audio input, audio output and video input devices.\n * ```\n * type DeviceMap = {\n * audioInput: InputDeviceInfo[];\n * audioOutput: MediaDeviceInfo[];\n * videoInput: InputDeviceInfo[];\n * }\n * ```\n */\nexport const selectDevices = (store: HMSStore) => {\n return store.devices;\n};\n\nexport const selectSpeakers = (store: HMSStore) => {\n return store.speakers;\n};\n\n/**\n * Select a boolean flag denoting whether you've joined a room.\n * NOTE: Returns true only after join, returns false during preview.\n */\nexport const selectIsConnectedToRoom = createSelector(\n [selectRoom],\n room => room && room.isConnected,\n);\n\nexport const selectPeerCount = createSelector(selectRoom, room => room.peers.length);\n\n/**\n * Select an array of peers(remote peers and your local peer) present in the room.\n */\nexport const selectPeers = createSelector([selectRoom, selectPeersMap], (room, storePeers) => {\n return room.peers.map(peerID => storePeers[peerID]);\n});\n\n/**\n * Select an array of tracks(remote peer tracks and your local tracks) present in the room.\n */\nconst selectTracks = createSelector(selectTracksMap, storeTracks => {\n return Object.values(storeTracks);\n});\n\n/**\n * Select the local peer object object assigned to you.\n */\nexport const selectLocalPeer = createSelector(selectRoom, selectPeersMap, (room, peers) => {\n return peers[room.localPeer];\n});\n\n/**\n * Select the peer ID of your local peer.\n */\nexport const selectLocalPeerID = createSelector(selectRoom, room => {\n return room.localPeer;\n});\n\n/**\n * Select the track ID of your local peer's primary audio track\n */\nexport const selectLocalAudioTrackID = createSelector(selectLocalPeer, peer => peer?.audioTrack);\n\n/**\n * Select the track ID of your local peer's primary video track\n */\nexport const selectLocalVideoTrackID = createSelector(selectLocalPeer, peer => peer?.videoTrack);\n\n/**\n * Select an array of track IDs of your local peer's auxiliary tracks\n */\nconst selectLocalAuxiliaryTrackIDs = createSelector(selectLocalPeer, peer => peer?.auxiliaryTracks);\n\n/**\n * Select an array of track IDs of all your local peer's tracks\n */\nexport const selectLocalTrackIDs = createSelector(\n [selectLocalAudioTrackID, selectLocalVideoTrackID, selectLocalAuxiliaryTrackIDs],\n (audioTrackID, videoTrackID, auxiliaryTrackIDs) => {\n const trackIDs: string[] = [...auxiliaryTrackIDs];\n audioTrackID && trackIDs.unshift(audioTrackID);\n videoTrackID && trackIDs.unshift(videoTrackID);\n return trackIDs;\n },\n);\n\n/**\n * Select remote peers(other users you're connected with via the internet) present in the room.\n */\nexport const selectRemotePeers = createSelector(selectPeers, peers => {\n return peers.filter(p => !p.isLocal);\n});\n\n/**\n * Select the peer who's speaking the loudest at the moment\n */\nexport const selectDominantSpeaker = createSelector(\n selectPeersMap,\n selectSpeakers,\n (peersMap, speakers) => {\n // sort in descending order by audio level\n const speakersInOrder = Object.entries(speakers).sort((s1, s2) => {\n const s1Level = s1[1]?.audioLevel || 0;\n const s2Level = s2[1]?.audioLevel || 0;\n return s2Level > s1Level ? 1 : -1;\n });\n if (\n speakersInOrder.length > 0 &&\n speakersInOrder[0][1].audioLevel &&\n speakersInOrder[0][1].audioLevel > 0\n ) {\n const peerID = speakersInOrder[0][1].peerID;\n if (peerID in peersMap) {\n return peersMap[peerID];\n }\n }\n return null;\n },\n);\n\n/**\n * Select a boolean denoting whether your local audio is unmuted\n * and the audio from your microphone is shared to remote peers\n */\nexport const selectIsLocalAudioEnabled = (store: HMSStore) => {\n const localPeer = selectLocalPeer(store);\n return isTrackEnabled(store, localPeer?.audioTrack);\n};\n\n/**\n * Select a boolean denoting whether your local video is unmuted\n * and the video from your camera is shared to remote peers\n */\nexport const selectIsLocalVideoEnabled = (store: HMSStore) => {\n const localPeer = selectLocalPeer(store);\n return isTrackEnabled(store, localPeer?.videoTrack);\n};\n\n/**\n * Select a boolean denoting whether you've chosen to unmute and share your local video.\n *\n * NOTE: Once you call `hmsActions.setLocalVideoEnabled(true)`to unmute your local video,\n * it takes some time to fetch your video from your video source.\n * This displayEnabled property gives immediate feedback for a more interactive UI,\n * without waiting for the video source\n */\nexport const selectIsLocalVideoDisplayEnabled = (store: HMSStore) => {\n const localPeer = selectLocalPeer(store);\n return isTrackDisplayEnabled(store, localPeer?.videoTrack);\n};\n\n/**\n * Select a boolean denoting whether your screen is shared to remote peers in the room.\n */\nexport const selectIsLocalScreenShared = createSelector(\n selectLocalPeer,\n selectTracksMap,\n (localPeer, tracksMap) => {\n const { video, audio } = getPeerTracksByCondition(tracksMap, localPeer);\n return !!(video || audio);\n },\n);\n\n/**\n * Select the first peer who is currently sharing their screen.\n */\nexport const selectPeerScreenSharing = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n let screensharePeer = undefined;\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { video, audio } = getPeerTracksByCondition(tracksMap, peer);\n if (video) {\n return peer;\n } else if (audio && !screensharePeer) {\n screensharePeer = peer;\n }\n }\n return screensharePeer;\n },\n);\n\n/**\n * Select a boolean denoting whether someone is sharing screen in the room.\n */\nexport const selectIsSomeoneScreenSharing = createSelector(selectPeerScreenSharing, peer => {\n return !!peer;\n});\n\n/**\n * Select the first peer who is currently sharing their audio only screen\n */\nexport const selectPeerSharingAudio = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { audio, video } = getPeerTracksByCondition(tracksMap, peer);\n if (!video && !!audio) {\n return peer;\n }\n }\n return undefined;\n },\n);\n\n/**\n * Select an array of peers who are currently sharing their screen.\n */\nexport const selectPeersScreenSharing = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n const videoPeers = [];\n const audioPeers = [];\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { video, audio } = getPeerTracksByCondition(tracksMap, peer);\n if (video) {\n videoPeers.push(peer);\n } else if (audio) {\n audioPeers.push(peer);\n }\n }\n return videoPeers.concat(audioPeers);\n },\n);\n\nexport const selectPeerSharingVideoPlaylist = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { video } = getPeerTracksByCondition(tracksMap, peer, isVideoPlaylist);\n if (video) {\n return peer;\n }\n }\n return undefined;\n },\n);\n\n/**\n * Select an array of tracks that have been degraded(receiving lower video quality/no video) due to bad network locally.\n */\nexport const selectDegradedTracks = createSelector(selectTracks, tracks =>\n tracks.filter(isDegraded),\n);\n\n/**\n * Select the number of messages(sent and received).\n */\nexport const selectHMSMessagesCount = createSelector(\n selectMessageIDsInOrder,\n messageIDs => messageIDs.length,\n);\n\n/**\n * Select the number of unread messages.\n */\nexport const selectUnreadHMSMessagesCount = createSelector(selectMessagesMap, messages => {\n return Object.values(messages).filter(m => !m.read).length;\n});\n\n/**\n * Select an array of messages in the room(sent and received).\n */\nexport const selectHMSMessages = createSelector(\n selectMessageIDsInOrder,\n selectMessagesMap,\n (msgIDs, msgMap) => {\n const messages: HMSMessage[] = [];\n msgIDs.forEach(msgId => {\n messages.push(msgMap[msgId]);\n });\n return messages;\n },\n);\n\n/**\n * Select the current state of the room.\n */\nexport const selectRoomState = createSelector([selectRoom], room => room && room.roomState);\n\n/**\n * Select a boolean denoting whether the room is in Preview state.\n */\nexport const selectIsInPreview = createSelector(\n selectRoomState,\n roomState => roomState === HMSRoomState.Preview,\n);\n\nexport const selectRoomStarted = createSelector(\n selectRoom,\n room => room.roomState !== HMSRoomState.Disconnected,\n);\n\n/**\n * Select available roles in the room as a map between the role name and {@link HMSRole} object.\n */\nexport const selectRolesMap = (store: HMSStore): Record<string, HMSRole> => {\n return store.roles;\n};\n\n/**\n * Select an array of names of available roles in the room.\n */\nexport const selectAvailableRoleNames = createSelector([selectRolesMap], rolesMap =>\n Object.keys(rolesMap),\n);\n\n/**\n * Select the {@link HMSRole} object of your local peer.\n */\nexport const selectLocalPeerRole = createSelector(\n [selectLocalPeer, selectRolesMap],\n (localPeer, rolesMap) => (localPeer?.roleName ? rolesMap[localPeer.roleName] : null),\n);\n\n/**\n * Select a boolean denoting whether if your local peer is allowed to subscribe to any other role.\n */\nexport const selectIsAllowedToSubscribe = createSelector([selectLocalPeerRole], (role): boolean => {\n if (!role?.subscribeParams?.subscribeToRoles) {\n return false;\n }\n return role.subscribeParams.subscribeToRoles.length > 0;\n});\n\n/**\n * Select the permissions which determine what actions the local peer can do.\n */\nexport const selectPermissions = createSelector(selectLocalPeerRole, role => role?.permissions);\nexport const selectRecordingState = createSelector(selectRoom, room => room.recording);\nexport const selectRTMPState = createSelector(selectRoom, room => room.rtmp);\n","import { createSelector } from 'reselect';\nimport { HMSPlaylistType, HMSStore, HMSPlaylistSelector } from '../schema';\n\n/**\n * @internal\n */\nconst selectPlaylistMap = (type: HMSPlaylistType = HMSPlaylistType.audio) => (store: HMSStore) =>\n store.playlist[type].list;\n\nconst selectPlaylistSelection = (type: HMSPlaylistType = HMSPlaylistType.audio) => (\n store: HMSStore,\n) => store.playlist[type].selection;\n\nconst selectPlaylistProgress = (type: HMSPlaylistType = HMSPlaylistType.audio) => (\n store: HMSStore,\n) => store.playlist[type].progress;\n\nconst selectPlaylistCurrentTime = (type: HMSPlaylistType = HMSPlaylistType.audio) => (\n store: HMSStore,\n) => store.playlist[type].currentTime;\n\nconst selectPlaylistVolume = (type: HMSPlaylistType = HMSPlaylistType.audio) => (store: HMSStore) =>\n store.playlist[type].volume;\n\n/**\n * Select an array of playlist items.\n */\nconst selectPlaylist = (type: HMSPlaylistType = HMSPlaylistType.audio) =>\n createSelector(selectPlaylistMap(type), storePlaylist => {\n return Object.values(storePlaylist);\n });\n\nconst selectPlaylistSelectedItem = (type: HMSPlaylistType = HMSPlaylistType.audio) =>\n createSelector(\n selectPlaylistMap(type),\n selectPlaylistSelection(type),\n (storePlaylist, currentSelection) => {\n if (!currentSelection.id) {\n return;\n }\n return storePlaylist[currentSelection.id];\n },\n );\n\nexport const selectAudioPlaylist: HMSPlaylistSelector = {\n selection: selectPlaylistSelection(HMSPlaylistType.audio),\n progress: selectPlaylistProgress(HMSPlaylistType.audio),\n currentTime: selectPlaylistCurrentTime(HMSPlaylistType.audio),\n volume: selectPlaylistVolume(HMSPlaylistType.audio),\n list: selectPlaylist(HMSPlaylistType.audio),\n selectedItem: <any>selectPlaylistSelectedItem(HMSPlaylistType.audio),\n};\n\nexport const selectVideoPlaylist: HMSPlaylistSelector = {\n selection: selectPlaylistSelection(HMSPlaylistType.video),\n progress: selectPlaylistProgress(HMSPlaylistType.video),\n currentTime: selectPlaylistCurrentTime(HMSPlaylistType.audio),\n volume: selectPlaylistVolume(HMSPlaylistType.video),\n list: selectPlaylist(HMSPlaylistType.video),\n selectedItem: <any>selectPlaylistSelectedItem(HMSPlaylistType.video),\n};\n","import { HMSLogLevel } from '../core/hmsSDKStore/sdkTypes';\n\nconst HMS_STORE_TAG = 'HMS-Store:';\n\nexport class HMSLogger {\n static level: HMSLogLevel = HMSLogLevel.VERBOSE;\n\n static v(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.VERBOSE, tag, ...data);\n }\n\n static d(...data: any[]) {\n this.log(HMSLogLevel.DEBUG, ...data);\n }\n\n static i(...data: any[]) {\n this.log(HMSLogLevel.INFO, ...data);\n }\n\n static w(...data: any[]) {\n this.log(HMSLogLevel.WARN, ...data);\n }\n\n static e(...data: any[]) {\n this.log(HMSLogLevel.ERROR, ...data);\n }\n\n /* eslint-disable */\n private static log(level: HMSLogLevel, ...data: any[]) {\n if (this.level.valueOf() > level.valueOf()) {\n return;\n }\n\n switch (level) {\n case HMSLogLevel.VERBOSE: {\n console.log(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.DEBUG: {\n console.debug(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.INFO: {\n console.info(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.WARN: {\n console.warn(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.ERROR: {\n console.error(HMS_STORE_TAG, ...data);\n break;\n }\n }\n }\n}\n","import { createSelector } from 'reselect';\nimport { selectHMSMessages, selectLocalPeerID, selectPeersMap, selectTracksMap } from './selectors';\nimport { HMSPeerID, HMSRoleName, HMSStore, HMSTrack, HMSTrackID } from '../schema';\nimport {\n getPeerTracksByCondition,\n isAudio,\n isVideoPlaylist,\n isTrackEnabled,\n isVideo,\n isAudioPlaylist,\n} from './selectorUtils';\nimport { HMSLogger } from '../../common/ui-logger';\n\ntype byIDSelector<T> = (store: HMSStore, id?: string) => T;\n\n/**\n * StoreSelector is a function that takes in {@link HMSStore} as argument\n * and returns a part of the store that is queried using the selector.\n * @typeParam T Part of the store that you wish to query.\n */\ntype StoreSelector<T> = (store: HMSStore) => T;\n\n/**\n * takes in a normal selector which has store and id as input and curries it to make it easier to use.\n * Before: store.getState((store) => normalSelector(store, peerID))\n * After: store.getState(curriedSelector(peerID))\n */\nfunction byIDCurry<T>(selector: byIDSelector<T>): (id?: string) => StoreSelector<T> {\n return (id?: string) => {\n return (store: HMSStore) => selector(store, id);\n };\n}\n\nconst selectPeerID = (_store: HMSStore, peerID: HMSPeerID | undefined) => peerID;\nconst selectTrackID = (_store: HMSStore, trackID: HMSTrackID | undefined) => trackID;\nconst selectRoleName = (_store: HMSStore, roleName: HMSRoleName | undefined) => roleName;\n\nconst selectPeerByIDBare = createSelector([selectPeersMap, selectPeerID], (storePeers, peerID) =>\n peerID ? storePeers[peerID] : null,\n);\n\nconst selectTrackByIDBare = createSelector(\n [selectTracksMap, selectTrackID],\n (storeTracks, trackID) => (trackID ? storeTracks[trackID] : null),\n);\n\n/**\n * Select the {@link HMSPeer} object given a peer ID.\n */\nexport const selectPeerByID = byIDCurry(selectPeerByIDBare);\n\n/**\n * Select the name of a {@link HMSPeer} given a peer ID.\n */\nexport const selectPeerNameByID = byIDCurry(createSelector(selectPeerByIDBare, peer => peer?.name));\n\n/**\n * Select the {@link HMSTrack} object given a track ID.\n */\nexport const selectTrackByID = byIDCurry(selectTrackByIDBare);\n\n/**\n * Select the primary video track of a peer given a peer ID.\n */\nexport const selectVideoTrackByPeerID = byIDCurry((store: HMSStore, peerID?: HMSPeerID):\n | HMSTrack\n | undefined => {\n const peer = selectPeerByIDBare(store, peerID);\n if (peer && peer.videoTrack && peer.videoTrack !== '') {\n return store.tracks[peer.videoTrack];\n }\n return undefined;\n});\n\n/**\n * Select the primary audio track of a peer given a peer ID.\n */\nexport const selectAudioTrackByPeerID = byIDCurry((store: HMSStore, peerID?: HMSPeerID):\n | HMSTrack\n | undefined => {\n const peer = selectPeerByIDBare(store, peerID);\n if (peer && peer.audioTrack && peer.audioTrack !== '') {\n return store.tracks[peer.audioTrack];\n }\n return undefined;\n});\n\n/**\n * Select the camera stream of a peer given a peer ID.\n * This is the primary video track of a peer.\n */\nexport const selectCameraStreamByPeerID = selectVideoTrackByPeerID;\n\n/**\n * Select an array of auxiliary tracks of a peer given a peer ID.\n */\nexport const selectAuxiliaryTracksByPeerID = byIDCurry(\n (store: HMSStore, peerID?: HMSPeerID): HMSTrack[] => {\n const peer = selectPeerByIDBare(store, peerID);\n return peer?.auxiliaryTracks.map(trackID => store.tracks[trackID]) || [];\n },\n);\n\nconst selectSpeakerByTrackID = (store: HMSStore, trackID: HMSTrackID | undefined) => {\n return trackID ? store.speakers[trackID] : null;\n};\n\n/**\n * Select the audio level of a track given a track ID.\n */\nexport const selectTrackAudioByID = byIDCurry(\n createSelector(selectSpeakerByTrackID, speaker => speaker?.audioLevel || 0),\n);\n\n/**\n * Select speaker object of audioTrack of a peer given a peer ID.\n */\nconst selectSpeakerByPeerID = (store: HMSStore, peerID: HMSPeerID | undefined) => {\n const peerAudioTrack = selectAudioTrackByPeerID(peerID)(store);\n return selectSpeakerByTrackID(store, peerAudioTrack?.id);\n};\n\n/**\n * Select audio level of audioTrack of a peer given a peer IDß.\n */\nexport const selectPeerAudioByID = byIDCurry(\n createSelector(selectSpeakerByPeerID, speaker => speaker?.audioLevel || 0),\n);\n\n/**\n * Select the first auxiliary audio track of a peer given a peer ID.\n */\nexport const selectAuxiliaryAudioByPeerID = byIDCurry((store: HMSStore, peerID?: HMSPeerID):\n | HMSTrack\n | undefined => {\n const peer = selectPeerByIDBare(store, peerID);\n if (peer) {\n const trackID = peer?.auxiliaryTracks.find(trackID => isAudio(store.tracks[trackID]));\n return trackID ? store.tracks[trackID] : undefined;\n }\n return undefined;\n});\n\nexport const selectVideoPlaylistVideoTrackByPeerID = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n const trackID = peer?.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return isVideoPlaylist(track) && isVideo(track);\n });\n return trackID ? tracks[trackID] : undefined;\n }),\n);\n\nexport const selectVideoPlaylistAudioTrackByPeerID = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n const trackID = peer?.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return isVideoPlaylist(track) && isAudio(track);\n });\n return trackID ? tracks[trackID] : undefined;\n }),\n);\n\nexport const selectAudioPlaylistTrackByPeerID = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n const trackID = peer?.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return isAudioPlaylist(track) && isAudio(track);\n });\n return trackID ? tracks[trackID] : undefined;\n }),\n);\n\nexport const selectScreenSharesByPeerId = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n return getPeerTracksByCondition(tracks, peer);\n }),\n);\n\n/**\n * Select the screen share video track of a peer given a peer ID.\n */\nexport const selectScreenShareByPeerID = (id?: string) =>\n createSelector(selectScreenSharesByPeerId(id), screenshare => {\n return screenshare.video;\n });\n\n/**\n * Select the screen share audio track of a peer given a peer ID.\n */\nexport const selectScreenShareAudioByPeerID = (id?: string) =>\n createSelector(selectScreenSharesByPeerId(id), screenshare => {\n return screenshare.audio;\n });\n\n/**\n * Select a boolean denoting whether a peer has unmuted audio and sharing it to other peers.\n */\nexport const selectIsPeerAudioEnabled = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return isTrackEnabled(store, peer?.audioTrack);\n});\n\n/**\n * Select a boolean denoting whether a peer has unmuted video and sharing it to other peers.\n */\nexport const selectIsPeerVideoEnabled = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return isTrackEnabled(store, peer?.videoTrack);\n});\n\n/**\n * Select a boolean denoting whether you've muted an audio track locally(only for you) given a track ID.\n */\nexport const selectIsAudioLocallyMuted = byIDCurry((store: HMSStore, trackID?: string) => {\n if (trackID && store.tracks[trackID]) {\n return store.tracks[trackID].volume === 0;\n }\n return undefined;\n});\n\n/**\n * Select a boolean denoting whether you've muted the primary audio track of a peer locally(only for you) given a peer ID.\n */\nexport const selectIsLocallyMutedByPeerID = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return selectIsAudioLocallyMuted(peer?.audioTrack)(store);\n});\n\n/**\n * Select a boolean denoting whether you've muted the screen share audio track of a peer locally(only for you) given a peer ID.\n */\nexport const selectIsScreenShareLocallyMutedByPeerID = byIDCurry(\n (store: HMSStore, peerID?: string) => {\n const track = selectScreenShareAudioByPeerID(peerID)(store);\n return selectIsAudioLocallyMuted(track?.id)(store);\n },\n);\n\n/**\n * Select the local audio volume of an audio track given a track ID.\n *\n * NOTE: **Volume** of a track is different from **Audio Level** of a track,\n * - Audio Level measures the audio of a track and it comes from 100ms's servers.\n * - Volume is how loud you hear the audio of a track, this is controlled by you at the client side.\n */\nexport const selectAudioTrackVolume = byIDCurry((store: HMSStore, trackID?: string) => {\n const track = selectTrackByIDBare(store, trackID);\n if (track) {\n if (track.type !== 'audio') {\n HMSLogger.w('Please pass audio track here');\n return undefined;\n }\n return track.volume;\n }\n return undefined;\n});\n\n/**\n * Select the local audio volume of the primary audio track of a peer given a peer ID.\n */\nexport const selectAudioVolumeByPeerID = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return selectAudioTrackVolume(peer?.audioTrack)(store);\n});\n\n/**\n * Select the local audio volume of the screen share of a peer given a peer ID.\n */\nexport const selectScreenshareAudioVolumeByPeerID = byIDCurry(\n (store: HMSStore, peerID?: string) => {\n const track = selectScreenShareAudioByPeerID(peerID)(store);\n return selectAudioTrackVolume(track?.id)(store);\n },\n);\n\n/**\n * Select the current simulcast layer of a track given a track ID.\n */\nexport const selectSimulcastLayerByTrack = byIDCurry((store: HMSStore, trackID?: string) => {\n const track = selectTrackByIDBare(store, trackID);\n if (track) {\n if (track.type !== 'video') {\n HMSLogger.w('Please pass video track here');\n return undefined;\n }\n return track.layer;\n }\n return undefined;\n});\n\nconst selectMessagesByPeerIDInternal = createSelector(\n [selectHMSMessages, selectLocalPeerID, selectPeerID],\n (messages, localPeerID, peerID) => {\n if (!peerID) {\n return undefined;\n }\n return messages.filter(message => {\n // Broadcast message\n if (!message.recipientPeer && !message.recipientRoles?.length) {\n return false;\n }\n // if localPeer or peerID is not a sender remove this\n if (![localPeerID, peerID].includes(message.sender)) {\n return false;\n }\n // at this point we know the sender is one of local or passed in peer, check the recipient side\n return [localPeerID, peerID].includes(message.recipientPeer!);\n });\n },\n);\n\nconst selectMessagesByRoleInternal = createSelector(\n [selectHMSMessages, selectRoleName],\n (messages, roleName) => {\n if (!roleName) {\n return undefined;\n }\n return messages.filter(message => {\n // Not Role message - Broadcast message or Private Peer message\n if (!message.recipientRoles?.length) {\n return false;\n }\n return message.recipientRoles?.includes(roleName);\n });\n },\n);\n\nexport const selectBroadcastMessages = createSelector(selectHMSMessages, messages => {\n return messages.filter(message => {\n if (!message.recipientPeer && !message.recipientRoles?.length) {\n return true;\n }\n return false;\n });\n});\n\nconst selectUnreadMessageCountByRole = createSelector(\n [selectMessagesByRoleInternal, selectRoleName],\n messages => {\n if (!messages) {\n return 0;\n }\n return messages.filter(m => !m.read).length;\n },\n);\n\nconst selectUnreadMessageCountByPeerID = createSelector(\n [selectMessagesByPeerIDInternal, selectPeerID],\n messages => {\n if (!messages) {\n return 0;\n }\n return messages.filter(m => !m.read).length;\n },\n);\n\nexport const selectBroadcastMessagesUnreadCount = createSelector(\n selectBroadcastMessages,\n messages => {\n return messages.filter(m => !m.read).length;\n },\n);\n\nexport const selectMessagesByPeerID = byIDCurry(selectMessagesByPeerIDInternal);\n\nexport const selectMessagesByRole = byIDCurry(selectMessagesByRoleInternal);\n\nexport const selectMessagesUnreadCountByRole = byIDCurry(selectUnreadMessageCountByRole);\nexport const selectMessagesUnreadCountByPeerID = byIDCurry(selectUnreadMessageCountByPeerID);\n","import { HMSPeer, HMSStore } from '../schema';\nimport { selectLocalPeerRole, selectPeersMap, selectRolesMap, selectTracksMap } from './selectors';\nimport { createSelector } from 'reselect';\nimport { HMSRole } from '@100mslive/hms-video';\n\nexport interface HMSPeerWithMuteStatus {\n peer: HMSPeer;\n isAudioEnabled?: boolean;\n}\n\n/**\n * @privateRemarks\n * this is more friendly to UI format, the object in store has only peer id and role name instead of the full objects\n */\nexport interface HMSRoleChangeRequest {\n requestedBy: HMSPeer;\n role: HMSRole;\n token: string;\n}\n\nexport interface HMSPublishAllowed {\n video: boolean;\n audio: boolean;\n screen: boolean;\n}\n\nexport const selectPeersWithAudioStatus = createSelector(\n [selectPeersMap, selectTracksMap],\n (peersMap, tracksMap) => {\n const participants: HMSPeerWithMuteStatus[] = Object.values(peersMap).map(peer => {\n return {\n peer: peer,\n isAudioEnabled: peer.audioTrack ? tracksMap[peer.audioTrack]?.enabled : false,\n };\n });\n return participants;\n },\n);\n\nconst selectRoleChangeStoreRequest = (store: HMSStore) => {\n return store.roleChangeRequests[0] || null;\n};\n\n/**\n * Select the role change request received for your local peer.\n */\nexport const selectRoleChangeRequest = createSelector(\n [selectRoleChangeStoreRequest, selectPeersMap, selectRolesMap],\n (request, peersMap, rolesMap): HMSRoleChangeRequest | null => {\n if (!request) {\n return null;\n }\n return {\n requestedBy: peersMap[request.requestedBy],\n role: rolesMap[request.roleName],\n token: request.token,\n };\n },\n);\n\n/**\n * Select what streams is the local peer allowed to publish from video, audio and screenshare.\n */\nexport const selectIsAllowedToPublish = createSelector(\n [selectLocalPeerRole],\n (role): HMSPublishAllowed => {\n let video = false,\n audio = false,\n screen = false;\n if (role?.publishParams?.allowed) {\n video = role.publishParams.allowed.includes('video');\n audio = role.publishParams.allowed.includes('audio');\n screen = role.publishParams.allowed.includes('screen');\n }\n return {\n video,\n audio,\n screen,\n };\n },\n);\n","import { createSelector } from 'reselect';\nimport {\n selectLocalAudioTrackID,\n selectLocalVideoTrackID,\n selectRolesMap,\n selectTracksMap,\n} from './selectors';\nimport { HMSTrack } from '../schema';\n\nexport const selectRoleByRoleName = (roleName: string) =>\n createSelector([selectRolesMap], rolesMap => rolesMap[roleName]);\n\nconst selectLocalVideoPlugins = createSelector(\n [selectLocalVideoTrackID, selectTracksMap],\n (trackID, tracksMap) => {\n let track: HMSTrack | null = null;\n if (trackID) {\n track = tracksMap[trackID];\n }\n return track?.plugins || [];\n },\n);\n\nconst selectLocalAudioPlugins = createSelector(\n [selectLocalAudioTrackID, selectTracksMap],\n (trackID, tracksMap) => {\n let track: HMSTrack | null = null;\n if (trackID) {\n track = tracksMap[trackID];\n }\n return track?.plugins || [];\n },\n);\n\nexport const selectIsLocalVideoPluginPresent = (pluginName: string) => {\n return createSelector([selectLocalVideoPlugins], plugins => {\n return plugins.includes(pluginName);\n });\n};\n\nexport const selectIsLocalAudioPluginPresent = (pluginName: string) => {\n return createSelector([selectLocalAudioPlugins], plugins => {\n return plugins.includes(pluginName);\n });\n};\n","import { HMSTrack, HMSRemoteAudioTrack, HMSRemoteVideoTrack } from '@100mslive/hms-video';\n\nexport function isRemoteTrack(track: HMSTrack) {\n return track instanceof HMSRemoteAudioTrack || track instanceof HMSRemoteVideoTrack;\n}\n","import { HMSPlaylistItem, HMSPlaylistType, IHMSPlaylistActions } from '../schema';\nimport { HMSPlaylistManager } from './sdkTypes';\nimport { HMSLogger } from '../../common/ui-logger';\nimport { IHMSStore } from '../IHMSStore';\nimport { selectVideoPlaylist, selectAudioPlaylist } from '../selectors';\n\nexport class HMSPlaylist implements IHMSPlaylistActions {\n private type: HMSPlaylistType;\n constructor(\n private playlistManager: HMSPlaylistManager,\n type: HMSPlaylistType,\n private syncPlaylistState: (action: string) => void,\n private store: IHMSStore,\n ) {\n this.type = type;\n }\n\n async play(id: string): Promise<void> {\n if (!id) {\n HMSLogger.w('Please pass id to play');\n return;\n }\n await this.playlistManager.setEnabled(true, { id, type: this.type });\n }\n\n async pause(): Promise<void> {\n const selector =\n this.type === HMSPlaylistType.audio ? selectAudioPlaylist : selectVideoPlaylist;\n const selection = this.store.getState(selector.selection);\n if (!selection.id) {\n HMSLogger.w('No item is currently playing to pause');\n return;\n }\n await this.playlistManager.setEnabled(false, { id: selection.id, type: this.type });\n }\n\n async playNext(): Promise<void> {\n await this.playlistManager.playNext(this.type);\n }\n\n async playPrevious(): Promise<void> {\n await this.playlistManager.playPrevious(this.type);\n }\n\n seek(seekValue: number): void {\n this.playlistManager.seek(seekValue, this.type);\n this.syncPlaylistState(`seekOn${this.type}Playlist`);\n }\n\n seekTo(seekValue: number): void {\n this.playlistManager.seekTo(seekValue, this.type);\n this.syncPlaylistState(`seekToOn${this.type}Playlist`);\n }\n\n setVolume(volume: number): void {\n this.playlistManager.setVolume(volume, this.type);\n this.syncPlaylistState(`setVolumeOn${this.type}Playlist`);\n }\n\n setList<T>(list: HMSPlaylistItem<T>[]): void {\n this.playlistManager.setList(list);\n this.syncPlaylistState(`setListOn${this.type}Playlist`);\n }\n\n async stop(): Promise<void> {\n await this.playlistManager.stop(this.type);\n this.syncPlaylistState(`stop${this.type}Playlist`);\n }\n}\n","import {\n createDefaultStoreState,\n HMSMediaSettings,\n HMSMessage,\n HMSMessageInput,\n HMSPeer,\n HMSPeerID,\n HMSPlaylistType,\n HMSRoomState,\n HMSStore,\n HMSTrack,\n HMSTrackID,\n HMSTrackSource,\n HMSChangeMultiTrackStateParams,\n IHMSPlaylistActions,\n} from '../schema';\nimport { IHMSActions } from '../IHMSActions';\nimport * as sdkTypes from './sdkTypes';\nimport { SDKToHMS } from './adapter';\nimport {\n HMSRoleChangeRequest,\n selectHMSMessagesCount,\n selectIsLocalScreenShared,\n selectIsLocalVideoDisplayEnabled,\n selectIsLocalVideoEnabled,\n selectLocalAudioTrackID,\n selectLocalPeer,\n selectLocalTrackIDs,\n selectLocalVideoTrackID,\n selectPeerByID,\n selectPermissions,\n selectRolesMap,\n selectRoomStarted,\n selectRoomState,\n selectLocalMediaSettings,\n selectTrackByID,\n selectTracksMap,\n} from '../selectors';\nimport { HMSLogger } from '../../common/ui-logger';\nimport {\n HMSAudioPlugin,\n HMSAudioTrack as SDKHMSAudioTrack,\n HMSException as SDKHMSException,\n HMSLeaveRoomRequest as SDKHMSLeaveRoomRequest,\n HMSLocalAudioTrack as SDKHMSLocalAudioTrack,\n HMSLocalTrack as SDKHMSLocalTrack,\n HMSLocalVideoTrack as SDKHMSLocalVideoTrack,\n HMSLogLevel,\n HMSRemoteTrack as SDKHMSRemoteTrack,\n HMSRemoteVideoTrack as SDKHMSRemoteVideoTrack,\n HMSRoleChangeRequest as SDKHMSRoleChangeRequest,\n HMSChangeTrackStateRequest as SDKHMSChangeTrackStateRequest,\n HMSChangeMultiTrackStateParams as SDKHMSChangeMultiTrackStateParams,\n HMSChangeMultiTrackStateRequest as SDKHMSChangeMultiTrackStateRequest,\n HMSSdk,\n HMSSimulcastLayer,\n HMSTrack as SDKHMSTrack,\n HMSVideoPlugin,\n HMSVideoTrack as SDKHMSVideoTrack,\n} from '@100mslive/hms-video';\nimport { IHMSStore } from '../IHMSStore';\n\nimport {\n areArraysEqual,\n mergeNewPeersInDraft,\n mergeNewTracksInDraft,\n} from './sdkUtils/storeMergeUtils';\nimport { HMSNotifications } from './HMSNotifications';\nimport { NamedSetState } from './internalTypes';\nimport { isRemoteTrack } from './sdkUtils/sdkUtils';\nimport { HMSPlaylist } from './HMSPlaylist';\n// import { ActionBatcher } from './sdkUtils/ActionBatcher';\n\n/**\n * This class implements the IHMSActions interface for 100ms SDK. It connects with SDK\n * and takes control of data management by letting every action pass through it. The\n * passed in store is ensured to be the single source of truth reflecting current\n * room related data at any point in time.\n *\n * @privateRemarks\n * Things to keep in mind while updating store -\n * 1. Treat setState as an atomic operation, if an action results in multiple changes,\n * the changes should all happen within single setState function.\n * 2. While updating the state it's very important to not update the reference if\n * something is unchanged. Copy data in same reference object don't assign new\n * object.\n * 3. Mental Model(1) - Actions from backend -> Listeners of this class -> update store -> views update themselves\n * eg. for this - peer added, remote muted etc.\n * 4. Mental Model(2) - Actions from local -> View calls actions -> update store -> views update themselves\n * eg. local track enabled, join, leave etc.\n * 5. State is immutable, a new copy with new references is created when there is a change,\n * if you try to modify state outside of setState, there'll be an error.\n */\nexport class HMSSDKActions implements IHMSActions {\n private hmsSDKTracks: Record<string, SDKHMSTrack> = {};\n private hmsSDKPeers: Record<string, sdkTypes.HMSPeer> = {};\n private readonly sdk: HMSSdk;\n private readonly store: IHMSStore;\n private isRoomJoinCalled: boolean = false;\n private hmsNotifications: HMSNotifications;\n // private actionBatcher: ActionBatcher;\n audioPlaylist!: IHMSPlaylistActions;\n videoPlaylist!: IHMSPlaylistActions;\n\n constructor(store: IHMSStore, sdk: HMSSdk, notificationManager: HMSNotifications) {\n this.store = store;\n this.sdk = sdk;\n this.hmsNotifications = notificationManager;\n // this.actionBatcher = new ActionBatcher(store);\n }\n\n async unblockAudio() {\n await this.sdk.getAudioOutput().unblockAutoplay();\n }\n\n setVolume(value: number, trackId?: HMSTrackID): void {\n if (trackId) {\n this.setTrackVolume(value, trackId);\n } else {\n this.sdk.getAudioOutput().setVolume(value);\n this.syncRoomState('setOutputVolume');\n }\n }\n\n setAudioOutputDevice(deviceId: string): void {\n const deviceInfo = this.sdk.getAudioOutput().setDevice(deviceId);\n if (deviceInfo) {\n this.setState(draftStore => {\n draftStore.settings.audioOutputDeviceId = deviceId;\n }, 'setAudioOutputDevice');\n }\n }\n\n setPreferredLayer(trackId: string, layer: HMSSimulcastLayer) {\n const track = this.hmsSDKTracks[trackId];\n if (track) {\n if (track instanceof SDKHMSRemoteVideoTrack) {\n track.preferLayer(layer);\n this.updateVideoLayer(trackId, 'setPreferredLayer');\n } else {\n HMSLogger.w(`track ${trackId} is not an video track`);\n }\n } else {\n this.logPossibleInconsistency(`track ${trackId} not present, unable to set preffer layer`);\n }\n }\n\n async preview(config: sdkTypes.HMSConfig) {\n if (this.isRoomJoinCalled) {\n this.logPossibleInconsistency('attempting to call preview after join was called');\n return; // ignore\n }\n const roomState = this.store.getState(selectRoomState);\n if (roomState === HMSRoomState.Preview || roomState === HMSRoomState.Connecting) {\n this.logPossibleInconsistency(\n 'attempting to call preview while room is in preview/connecting',\n );\n return;\n }\n\n try {\n await this.sdkPreviewWithListeners(config);\n this.setState(store => {\n store.room.roomState = HMSRoomState.Connecting;\n }, 'preview');\n } catch (err) {\n HMSLogger.e('Cannot show preview. Failed to connect to room - ', err);\n throw err;\n }\n }\n\n join(config: sdkTypes.HMSConfig) {\n if (this.isRoomJoinCalled) {\n this.logPossibleInconsistency('room join is called again');\n return; // ignore\n }\n try {\n this.sdkJoinWithListeners(config);\n this.isRoomJoinCalled = true;\n this.setState(store => {\n store.room.roomState = HMSRoomState.Connecting;\n }, 'join');\n } catch (err) {\n this.isRoomJoinCalled = false; // so it can be called again if needed\n HMSLogger.e('Failed to connect to room - ', err);\n throw err;\n }\n }\n\n async leave() {\n const hasRoomStarted = this.store.getState(selectRoomStarted);\n if (!hasRoomStarted) {\n this.logPossibleInconsistency('room leave is called when no room is connected');\n return; // ignore\n }\n return this.sdk\n .leave()\n .then(() => {\n this.resetState('leave');\n HMSLogger.i('left room');\n })\n .catch(err => {\n HMSLogger.e('error in leaving room - ', err);\n });\n }\n\n async setScreenShareEnabled(enabled: boolean, audioOnly?: boolean) {\n if (enabled) {\n await this.startScreenShare(audioOnly);\n } else {\n await this.stopScreenShare();\n }\n }\n\n async addTrack(track: MediaStreamTrack, type: HMSTrackSource = 'regular') {\n await this.sdk.addTrack(track, type);\n this.syncRoomState('addTrack');\n }\n\n async removeTrack(trackId: string) {\n await this.sdk.removeTrack(trackId);\n this.syncRoomState('removeTrack');\n }\n\n async setLocalAudioEnabled(enabled: boolean) {\n const trackID = this.store.getState(selectLocalAudioTrackID);\n if (trackID) {\n await this.setEnabledTrack(trackID, enabled);\n }\n }\n\n async setLocalVideoEnabled(enabled: boolean) {\n const trackID = this.store.getState(selectLocalVideoTrackID);\n if (trackID) {\n await this.setEnabledTrack(trackID, enabled);\n }\n }\n\n async setEnabledTrack(trackID: string, enabled: boolean) {\n // if mute/unmute is clicked multiple times for same operation, ignore repeated ones\n const alreadyInSameState = this.store.getState().tracks[trackID]?.enabled === enabled;\n if (alreadyInSameState) {\n // it could also be a case of possible inconsistency where UI state is out of sync with truth\n this.logPossibleInconsistency(`local track[${trackID}] enabled state - ${enabled}`);\n return;\n }\n this.setState(store => {\n // show on UI immediately\n if (!store.tracks[trackID]) {\n this.logPossibleInconsistency('track id not found for setEnabled');\n } else {\n store.tracks[trackID].displayEnabled = enabled;\n }\n }, 'displayEnabled');\n try {\n await this.setEnabledSDKTrack(trackID, enabled); // do the operation\n this.syncRoomState('setEnabled');\n } catch (err) {\n // rollback on failure\n this.setState(store => {\n store.tracks[trackID].displayEnabled = !enabled;\n }, 'rollbackDisplayEnabled');\n this.hmsNotifications.sendError(SDKToHMS.convertException(err as SDKHMSException));\n throw err;\n }\n const type = enabled\n ? sdkTypes.HMSTrackUpdate.TRACK_UNMUTED\n : sdkTypes.HMSTrackUpdate.TRACK_MUTED;\n this.hmsNotifications.sendTrackUpdate(type, trackID);\n }\n\n async setAudioSettings(settings: Partial<sdkTypes.HMSAudioTrackSettings>) {\n const trackID = this.store.getState(selectLocalAudioTrackID);\n if (trackID) {\n await this.setSDKLocalAudioTrackSettings(trackID, settings);\n this.syncRoomState('setAudioSettings');\n }\n }\n\n async setVideoSettings(settings: Partial<sdkTypes.HMSVideoTrackSettings>) {\n const trackID = this.store.getState(selectLocalVideoTrackID);\n if (trackID) {\n await this.setSDKLocalVideoTrackSettings(trackID, settings);\n this.syncRoomState('setVideoSettings');\n }\n }\n\n sendMessage(message: string) {\n this.sendBroadcastMessage(message);\n }\n\n async sendBroadcastMessage(message: string, type?: string) {\n const sdkMessage = await this.sdk.sendBroadcastMessage(message, type);\n this.updateMessageInStore(sdkMessage, { message, type });\n }\n\n async sendGroupMessage(message: string, roles: string[], type?: string) {\n const storeRoles = this.store.getState(selectRolesMap);\n const hmsRoles = roles.map(roleName => {\n return storeRoles[roleName];\n });\n const sdkMessage = await this.sdk.sendGroupMessage(message, hmsRoles, type);\n this.updateMessageInStore(sdkMessage, { message, recipientRoles: roles, type });\n }\n\n async sendDirectMessage(message: string, peerID: string, type?: string) {\n const hmsPeer = this.hmsSDKPeers[peerID];\n const sdkMessage = await this.sdk.sendDirectMessage(message, hmsPeer);\n this.updateMessageInStore(sdkMessage, { message, recipientPeer: hmsPeer.peerId, type });\n }\n\n private updateMessageInStore(\n sdkMessage: sdkTypes.HMSMessage | void,\n messageInput: string | HMSMessageInput,\n ) {\n if (!sdkMessage) {\n HMSLogger.w('sendMessage', 'Failed to send message', messageInput);\n throw Error(`sendMessage Failed - ${JSON.stringify(messageInput)}`);\n }\n const hmsMessage = SDKToHMS.convertMessage(sdkMessage) as HMSMessage;\n hmsMessage.read = true;\n hmsMessage.senderName = 'You';\n this.onHMSMessage(hmsMessage);\n return hmsMessage;\n }\n\n setMessageRead(readStatus: boolean, messageId?: string) {\n this.setState(store => {\n if (messageId) {\n if (!store.messages.byID[messageId]) {\n this.logPossibleInconsistency('no message with id is found');\n } else {\n store.messages.byID[messageId].read = readStatus;\n }\n } else {\n store.messages.allIDs.forEach((id: string) => {\n store.messages.byID[id].read = readStatus;\n });\n }\n }, 'setMessageRead');\n }\n\n async attachVideo(trackID: string, videoElement: HTMLVideoElement) {\n if (this.localAndVideoUnmuting(trackID)) {\n // wait till video unmute has finished\n return new Promise<void>(resolve => {\n const unsub = this.store.subscribe(async enabled => {\n if (enabled) {\n await this.attachVideoInternal(trackID, videoElement);\n unsub();\n resolve();\n }\n }, selectIsLocalVideoEnabled);\n });\n } else {\n await this.attachVideoInternal(trackID, videoElement);\n }\n }\n\n async detachVideo(trackID: string, videoElement: HTMLVideoElement) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack && sdkTrack.type === 'video') {\n await (sdkTrack as SDKHMSVideoTrack).removeSink(videoElement);\n this.updateVideoLayer(trackID, 'detachVideo');\n } else {\n this.logPossibleInconsistency('no video track found to remove sink');\n }\n }\n\n async addPluginToVideoTrack(plugin: HMSVideoPlugin, pluginFrameRate?: number): Promise<void> {\n return this.addRemoveVideoPlugin(plugin, 'add', pluginFrameRate);\n }\n async addPluginToAudioTrack(plugin: HMSAudioPlugin): Promise<void> {\n return this.addRemoveAudioPlugin(plugin, 'add');\n }\n\n async removePluginFromVideoTrack(plugin: HMSVideoPlugin): Promise<void> {\n return this.addRemoveVideoPlugin(plugin, 'remove');\n }\n async removePluginFromAudioTrack(plugin: HMSAudioPlugin): Promise<void> {\n return this.addRemoveAudioPlugin(plugin, 'remove');\n }\n\n async changeRole(forPeerId: string, toRole: string, force: boolean = false) {\n const peer = this.hmsSDKPeers[forPeerId];\n if (!peer) {\n this.logPossibleInconsistency(`Unknown peer ID given ${forPeerId} for changerole`);\n return;\n }\n\n await this.sdk.changeRole(peer, toRole, force);\n }\n\n // TODO: separate out role related things in another file\n async acceptChangeRole(request: HMSRoleChangeRequest) {\n let sdkPeer: sdkTypes.HMSPeer | undefined = request.requestedBy\n ? this.hmsSDKPeers[request.requestedBy.id]\n : undefined;\n if (!sdkPeer) {\n HMSLogger.w(\n `peer for which role change is requested no longer available - ${request.requestedBy}`,\n );\n }\n const sdkRequest = {\n requestedBy: sdkPeer,\n role: request.role,\n token: request.token,\n };\n // TODO: hotfix for HMS-3639. Needs a better solution\n //@ts-ignore\n await this.sdk.acceptChangeRole(sdkRequest);\n this.removeRoleChangeRequest(request);\n }\n\n /**\n * @privateRemarks\n * there is no corresponding sdk method for rejecting change role but as the store also maintains the full\n * state of current pending requests, this method allows it to clean up when the request is rejected\n */\n rejectChangeRole(request: HMSRoleChangeRequest) {\n this.removeRoleChangeRequest(request);\n }\n\n async endRoom(lock: boolean, reason: string) {\n const permissions = this.store.getState(selectPermissions);\n if (!permissions?.endRoom) {\n HMSLogger.w('You are not allowed to perform this action - endRoom');\n return;\n }\n await this.sdk.endRoom(lock, reason);\n }\n\n async removePeer(peerID: string, reason: string) {\n const peer = this.hmsSDKPeers[peerID];\n if (peer && !peer.isLocal) {\n await this.sdk.removePeer(peer as sdkTypes.HMSRemotePeer, reason);\n } else {\n this.logPossibleInconsistency(`No remote peer found for peerID - ${peerID}`);\n return;\n }\n }\n\n async startRTMPOrRecording(params: sdkTypes.RTMPRecordingConfig) {\n await this.sdk.startRTMPOrRecording(params);\n }\n\n async stopRTMPAndRecording() {\n await this.sdk.stopRTMPAndRecording();\n }\n\n async setRemoteTrackEnabled(trackID: HMSTrackID | HMSTrackID[], enabled: boolean) {\n if (typeof trackID === 'string') {\n const track = this.hmsSDKTracks[trackID];\n if (track && isRemoteTrack(track)) {\n await this.sdk.changeTrackState(track as SDKHMSRemoteTrack, enabled);\n } else {\n this.logPossibleInconsistency(\n `No remote track with ID ${trackID} found for change track state`,\n );\n }\n } else if (Array.isArray(trackID)) {\n trackID.forEach(id => this.setRemoteTrackEnabled(id, enabled));\n }\n }\n\n async setRemoteTracksEnabled(params: HMSChangeMultiTrackStateParams) {\n const sdkRequest: SDKHMSChangeMultiTrackStateParams = {\n enabled: params.enabled,\n type: params.type,\n source: params.source,\n };\n if (params.roles) {\n const rolesMap = this.store.getState(selectRolesMap);\n sdkRequest.roles = params.roles.map(role => rolesMap[role]);\n }\n await this.sdk.changeMultiTrackState(sdkRequest);\n }\n\n setLogLevel(level: HMSLogLevel) {\n HMSLogger.level = level;\n this.sdk.setLogLevel(level);\n }\n\n private resetState(reason: string = 'resetState') {\n this.setState(store => {\n Object.assign(store, createDefaultStoreState());\n }, reason);\n this.isRoomJoinCalled = false;\n this.hmsSDKTracks = {};\n }\n\n private sdkJoinWithListeners(config: sdkTypes.HMSConfig) {\n this.sdk.join(config, {\n onJoin: this.onJoin.bind(this),\n onRoomUpdate: this.onRoomUpdate.bind(this),\n onPeerUpdate: this.onPeerUpdate.bind(this),\n onTrackUpdate: this.onTrackUpdate.bind(this),\n onMessageReceived: this.onMessageReceived.bind(this),\n onError: this.onError.bind(this),\n onReconnected: this.onReconnected.bind(this),\n onReconnecting: this.onReconnecting.bind(this),\n onRoleChangeRequest: this.onRoleChangeRequest.bind(this),\n onRoleUpdate: this.onRoleUpdate.bind(this),\n onDeviceChange: this.onDeviceChange.bind(this),\n onChangeTrackStateRequest: this.onChangeTrackStateRequest.bind(this),\n onChangeMultiTrackStateRequest: this.onChangeMultiTrackStateRequest.bind(this),\n onRemovedFromRoom: this.onRemovedFromRoom.bind(this),\n });\n this.sdk.addAudioListener({\n onAudioLevelUpdate: this.onAudioLevelUpdate.bind(this),\n });\n }\n\n private onRemovedFromRoom(request: SDKHMSLeaveRoomRequest) {\n const requestedBy = this.store.getState(selectPeerByID(request.requestedBy.peerId));\n if (!requestedBy) {\n this.logPossibleInconsistency(\n `Not found peer who requested leave room, ${request.requestedBy}`,\n );\n return;\n }\n this.hmsNotifications.sendLeaveRoom({\n ...request,\n requestedBy,\n });\n HMSLogger.i('resetting state after peer removed', request);\n this.resetState(request.roomEnded ? 'roomEnded' : 'removedFromRoom');\n }\n\n private onDeviceChange(event: sdkTypes.HMSDeviceChangeEvent) {\n const devices = event.devices;\n if (!devices) {\n return;\n }\n const localPeer = this.store.getState(selectLocalPeer);\n this.setState(store => {\n if (!areArraysEqual(store.devices.audioInput, devices.audioInput)) {\n store.devices.audioInput = devices.audioInput;\n }\n if (!areArraysEqual(store.devices.videoInput, devices.videoInput)) {\n store.devices.videoInput = devices.videoInput;\n }\n if (!areArraysEqual(store.devices.audioOutput, devices.audioOutput)) {\n store.devices.audioOutput = devices.audioOutput;\n }\n if (this.hmsSDKPeers[localPeer?.id]) {\n Object.assign(store.settings, this.getMediaSettings(this.hmsSDKPeers[localPeer?.id]));\n }\n }, 'deviceChange');\n // sync is needed to update the current selected device\n // this.syncRoomState('deviceChangeSync');\n // send notification only on device change - selection is present\n if (event.selection) {\n const notification = SDKToHMS.convertDeviceChangeUpdate(event);\n this.hmsNotifications.sendDeviceChange(notification);\n }\n }\n\n private async sdkPreviewWithListeners(config: sdkTypes.HMSConfig) {\n await this.sdk.preview(config, {\n onPreview: this.onPreview.bind(this),\n onError: this.onError.bind(this),\n onDeviceChange: this.onDeviceChange.bind(this),\n });\n this.sdk.addAudioListener({\n onAudioLevelUpdate: this.onAudioLevelUpdate.bind(this),\n });\n }\n\n private async startScreenShare(audioOnly?: boolean) {\n const isScreenShared = this.store.getState(selectIsLocalScreenShared);\n if (!isScreenShared) {\n await this.sdk.startScreenShare(() => this.syncRoomState('screenshareStopped'), audioOnly);\n this.syncRoomState('startScreenShare');\n } else {\n this.logPossibleInconsistency(\"start screenshare is called while it's on\");\n }\n }\n\n private async stopScreenShare() {\n const isScreenShared = this.store.getState(selectIsLocalScreenShared);\n if (isScreenShared) {\n await this.sdk.stopScreenShare();\n this.syncRoomState('stopScreenShare');\n } else {\n this.logPossibleInconsistency(\"stop screenshare is called while it's not on\");\n }\n }\n\n private async attachVideoInternal(trackID: string, videoElement: HTMLVideoElement) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack && sdkTrack.type === 'video') {\n await (sdkTrack as SDKHMSVideoTrack).addSink(videoElement);\n this.updateVideoLayer(trackID, 'attachVideo');\n } else {\n this.logPossibleInconsistency('no video track found to add sink');\n }\n }\n\n /**\n * This is a very important function as it's responsible for maintaining the source of\n * truth with maximum efficiency. The efficiency comes from the fact that the only\n * those portions of the store are updated which have actually changed.\n * While making a change in this function don't use functions like map, reduce etc.\n * which return a new copy of the data. Use Object.assign etc. to ensure that if the data\n * doesn't change reference is also not changed.\n * The UI and selectors rely on the fact that the store is immutable that is if there is\n * any change and only if there is a change, they'll get a new copy of the data they're\n * interested in with a new reference.\n * @protected\n */\n protected syncRoomState(action?: string) {\n console.time('syncRoomState');\n const newHmsPeers: Record<HMSPeerID, Partial<HMSPeer>> = {};\n const newHmsPeerIDs: HMSPeerID[] = []; // to add in room.peers\n const newHmsTracks: Record<HMSTrackID, Partial<HMSTrack>> = {};\n const newHmsSDkTracks: Record<HMSTrackID, SDKHMSTrack> = {};\n const newMediaSettings: Partial<HMSMediaSettings> = {};\n\n const sdkPeers: sdkTypes.HMSPeer[] = this.sdk.getPeers();\n\n // first convert everything in the new format\n for (let sdkPeer of sdkPeers) {\n const hmsPeer = SDKToHMS.convertPeer(sdkPeer);\n newHmsPeers[hmsPeer.id] = hmsPeer;\n newHmsPeerIDs.push(hmsPeer.id);\n this.hmsSDKPeers[hmsPeer.id] = sdkPeer;\n\n const sdkTracks = [sdkPeer.audioTrack, sdkPeer.videoTrack, ...sdkPeer.auxiliaryTracks];\n for (let sdkTrack of sdkTracks) {\n if (!sdkTrack) {\n continue;\n }\n const hmsTrack = SDKToHMS.convertTrack(sdkTrack);\n newHmsTracks[hmsTrack.id] = hmsTrack;\n newHmsSDkTracks[sdkTrack.trackId] = sdkTrack;\n }\n\n if (hmsPeer.isLocal) {\n Object.assign(newMediaSettings, this.getMediaSettings(sdkPeer));\n }\n }\n\n const recording = this.sdk.getRecordingState();\n const rtmp = this.sdk.getRTMPState();\n\n // then merge them carefully with our store so if something hasn't changed\n // the reference shouldn't change. Note that the draftStore is an immer draft\n // object.\n this.setState(draftStore => {\n draftStore.room.peers = newHmsPeerIDs;\n const draftPeers = draftStore.peers;\n const draftTracks = draftStore.tracks;\n // the order of below statements are important as merge functions are mutating\n mergeNewPeersInDraft(draftPeers, newHmsPeers, newHmsTracks, newHmsSDkTracks);\n mergeNewTracksInDraft(draftTracks, newHmsTracks);\n Object.assign(draftStore.settings, newMediaSettings);\n this.hmsSDKTracks = newHmsSDkTracks;\n Object.assign(draftStore.roles, SDKToHMS.convertRoles(this.sdk.getRoles()));\n Object.assign(draftStore.playlist, SDKToHMS.convertPlaylist(this.sdk.getPlaylistManager()));\n Object.assign(draftStore.room, SDKToHMS.convertRecordingRTMPState(recording, rtmp));\n }, action);\n console.timeEnd('syncRoomState');\n }\n\n protected onPreview(sdkRoom: sdkTypes.HMSRoom) {\n this.setState(store => {\n Object.assign(store.room, SDKToHMS.convertRoom(sdkRoom));\n store.room.roomState = HMSRoomState.Preview;\n }, 'previewStart');\n this.syncRoomState('previewSync');\n }\n\n protected onJoin(sdkRoom: sdkTypes.HMSRoom) {\n this.audioPlaylist = new HMSPlaylist(\n this.sdk.getPlaylistManager(),\n HMSPlaylistType.audio,\n this.syncPlaylistState.bind(this),\n this.store,\n );\n this.videoPlaylist = new HMSPlaylist(\n this.sdk.getPlaylistManager(),\n HMSPlaylistType.video,\n this.syncRoomState.bind(this),\n this.store,\n );\n this.syncRoomState('joinSync');\n this.setState(store => {\n Object.assign(store.room, SDKToHMS.convertRoom(sdkRoom));\n store.room.isConnected = true;\n store.room.roomState = HMSRoomState.Connected;\n }, 'joined');\n this.sdk.getPlaylistManager().onProgress(this.setProgress);\n this.sdk.getPlaylistManager().onNewTrackStart((item: sdkTypes.HMSPlaylistItem<any>) => {\n this.syncPlaylistState(`${item.type}PlaylistUpdate`);\n });\n this.sdk.getPlaylistManager().onPlaylistEnded((type: HMSPlaylistType) => {\n this.syncPlaylistState(`${type}PlaylistEnded`);\n });\n }\n\n //@ts-ignore\n protected onRoomUpdate(type: sdkTypes.HMSRoomUpdate, room: sdkTypes.HMSRoom) {\n this.setState(store => {\n Object.assign(store.room, SDKToHMS.convertRoom(room));\n }, 'RoomUpdate');\n }\n\n protected onPeerUpdate(\n type: sdkTypes.HMSPeerUpdate,\n sdkPeer: sdkTypes.HMSPeer | sdkTypes.HMSPeer[],\n ) {\n if (\n type === sdkTypes.HMSPeerUpdate.BECAME_DOMINANT_SPEAKER ||\n type === sdkTypes.HMSPeerUpdate.RESIGNED_DOMINANT_SPEAKER\n ) {\n return; // ignore, high frequency update so no point of syncing peers\n } else if (Array.isArray(sdkPeer)) {\n this.syncRoomState('peersJoined');\n for (let peer of sdkPeer) {\n const hmsPeer = this.store.getState(selectPeerByID(peer.peerId));\n this.hmsNotifications.sendPeerUpdate(type, hmsPeer);\n }\n } else {\n this.peerUpdateInternal(type, sdkPeer);\n }\n }\n\n protected onTrackUpdate(\n type: sdkTypes.HMSTrackUpdate,\n track: SDKHMSTrack,\n peer: sdkTypes.HMSPeer,\n ) {\n // this check is needed because for track removed case, the notification needs to\n // be send before the track is removed from store\n if (type === sdkTypes.HMSTrackUpdate.TRACK_REMOVED) {\n this.hmsNotifications.sendTrackUpdate(type, track.trackId);\n this.handleTrackRemove(track, peer);\n } else {\n const actionName =\n type === sdkTypes.HMSTrackUpdate.TRACK_ADDED ? 'trackAdded' : 'trackUpdate';\n this.syncRemoteTrackState(actionName, track, peer);\n this.hmsNotifications.sendTrackUpdate(type, track.trackId);\n }\n }\n\n protected onMessageReceived(sdkMessage: sdkTypes.HMSMessage) {\n const hmsMessage = SDKToHMS.convertMessage(sdkMessage) as HMSMessage;\n hmsMessage.read = false;\n this.onHMSMessage(hmsMessage);\n this.hmsNotifications.sendMessageReceived(hmsMessage);\n }\n\n protected onHMSMessage(hmsMessage: HMSMessage) {\n this.setState(store => {\n hmsMessage.id = String(this.store.getState(selectHMSMessagesCount) + 1);\n store.messages.byID[hmsMessage.id] = hmsMessage;\n store.messages.allIDs.push(hmsMessage.id);\n }, 'newMessage');\n }\n\n /*\n * Note: speakers array contain the value only for peers who have audioLevel != 0\n */\n protected onAudioLevelUpdate(sdkSpeakers: sdkTypes.HMSSpeaker[]) {\n this.setState(store => {\n const trackIDAudioLevelMap: Record<HMSPeerID, number> = {};\n sdkSpeakers.forEach(sdkSpeaker => {\n if (!sdkSpeaker.track || !sdkSpeaker.peer) {\n return;\n }\n const trackID = sdkSpeaker.track.trackId;\n trackIDAudioLevelMap[trackID] = sdkSpeaker.audioLevel;\n if (!store.speakers[trackID]) {\n // Set store instances(peers, tracks) references in speaker, not the new ones received.\n store.speakers[trackID] = {\n audioLevel: sdkSpeaker.audioLevel,\n peerID: sdkSpeaker.peer.peerId,\n trackID: trackID,\n };\n }\n });\n const speakerEntries = Object.entries(store.speakers);\n for (let [trackID, speaker] of speakerEntries) {\n speaker.audioLevel = trackIDAudioLevelMap[trackID] || 0;\n if (speaker.audioLevel === 0) {\n delete store.speakers[trackID];\n }\n }\n }, 'audioLevel');\n }\n\n protected onChangeTrackStateRequest(request: SDKHMSChangeTrackStateRequest) {\n const requestedBy = this.store.getState(selectPeerByID(request.requestedBy.peerId));\n const storeTrackID = this.getStoreLocalTrackIDfromSDKTrack(request.track);\n const track = this.store.getState(selectTrackByID(storeTrackID));\n\n if (!requestedBy) {\n return this.logPossibleInconsistency(\n `Not found peer who requested track state change, ${request.requestedBy}`,\n );\n }\n if (!track) {\n return this.logPossibleInconsistency(\n `Not found track for which track state change was requested, ${request.track}`,\n );\n }\n\n if (!request.enabled) {\n this.syncRoomState('changeTrackStateRequest');\n }\n\n this.hmsNotifications.sendChangeTrackStateRequest({\n requestedBy,\n track,\n enabled: request.enabled,\n });\n }\n\n protected onChangeMultiTrackStateRequest(request: SDKHMSChangeMultiTrackStateRequest) {\n const requestedBy = this.store.getState(selectPeerByID(request.requestedBy.peerId));\n\n if (!requestedBy) {\n return this.logPossibleInconsistency(\n `Not found peer who requested track state change, ${request.requestedBy}`,\n );\n }\n\n if (!request.enabled) {\n this.syncRoomState('changeMultiTrackStateRequest');\n }\n\n const tracks: HMSTrack[] = [];\n const tracksMap = this.store.getState(selectTracksMap);\n for (const track of request.tracks) {\n const storeTrackID = this.getStoreLocalTrackIDfromSDKTrack(track);\n if (storeTrackID && tracksMap[storeTrackID]) {\n tracks.push(tracksMap[storeTrackID]);\n }\n }\n\n this.hmsNotifications.sendChangeMultiTrackStateRequest({\n requestedBy,\n tracks,\n enabled: request.enabled,\n type: request.type,\n source: request.source,\n });\n }\n\n protected onReconnected() {\n this.syncRoomState('reconnectedSync');\n this.hmsNotifications.sendReconnected();\n this.setState(store => {\n store.room.roomState = HMSRoomState.Connected;\n }, 'reconnected');\n }\n\n protected onReconnecting(sdkError: SDKHMSException) {\n const error = SDKToHMS.convertException(sdkError);\n HMSLogger.e('Reconnection: received error from sdk', error);\n this.hmsNotifications.sendReconnecting(error);\n this.setState(store => {\n store.room.roomState = HMSRoomState.Reconnecting;\n store.errors.push(error);\n }, 'reconnecting');\n }\n\n protected onError(sdkException: SDKHMSException) {\n const error = SDKToHMS.convertException(sdkException);\n if (error.isTerminal) {\n // terminal error leave room as it is not recoverable\n this.leave().then(() => console.log('error from SDK, left room.'));\n this.setState(store => {\n store.room.roomState = HMSRoomState.Failed;\n store.errors.push(error);\n }, 'errorTerminal');\n } else {\n const numExistingErrors = this.store.getState().errors.length;\n // just in case there is some infinite loop sending errors\n if (numExistingErrors < 50) {\n this.setState(store => {\n store.errors.push(error);\n }, 'error');\n }\n }\n // send notification\n this.hmsNotifications.sendError(error);\n HMSLogger.e('received error from sdk', error);\n }\n\n /**\n * the layer gets updated on addsink/removesink/preferlayer calls, for simulcast there\n * can be multiple layers, while for non simulcast there will be None and High.\n */\n private updateVideoLayer(trackID: string, action: string) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack && sdkTrack instanceof SDKHMSRemoteVideoTrack) {\n this.setState(draft => {\n draft.tracks[trackID].layer = sdkTrack.getSimulcastLayer();\n }, action);\n }\n }\n\n private handleTrackRemove(sdkTrack: SDKHMSTrack, sdkPeer: sdkTypes.HMSPeer) {\n this.setState(draftStore => {\n const hmsPeer = draftStore.peers[sdkPeer.peerId];\n const draftTracks = draftStore.tracks;\n // find and remove the exact track from hmsPeer\n if (this.isSameStoreSDKTrack(sdkTrack.trackId, hmsPeer?.audioTrack)) {\n delete hmsPeer?.audioTrack;\n } else if (this.isSameStoreSDKTrack(sdkTrack.trackId, hmsPeer?.videoTrack)) {\n delete hmsPeer?.videoTrack;\n } else {\n const auxiliaryIndex = hmsPeer?.auxiliaryTracks.indexOf(sdkTrack.trackId);\n if (\n auxiliaryIndex > -1 &&\n this.isSameStoreSDKTrack(sdkTrack.trackId, hmsPeer?.auxiliaryTracks[auxiliaryIndex])\n ) {\n hmsPeer?.auxiliaryTracks.splice(auxiliaryIndex, 1);\n }\n }\n delete draftTracks[sdkTrack.trackId];\n delete this.hmsSDKTracks[sdkTrack.trackId];\n }, 'trackRemoved');\n }\n\n private async setEnabledSDKTrack(trackID: string, enabled: boolean) {\n const track = this.hmsSDKTracks[trackID];\n if (track) {\n await track.setEnabled(enabled);\n } else {\n this.logPossibleInconsistency(`track ${trackID} not present, unable to enabled/disable`);\n }\n }\n\n private async setSDKLocalVideoTrackSettings(\n trackID: string,\n settings: Partial<sdkTypes.HMSVideoTrackSettings>,\n ) {\n const track = this.hmsSDKTracks[trackID] as SDKHMSLocalVideoTrack;\n if (track) {\n await track.setSettings(settings);\n } else {\n this.logPossibleInconsistency(`local track ${trackID} not present, unable to set settings`);\n }\n }\n\n private async setSDKLocalAudioTrackSettings(\n trackID: string,\n settings: Partial<sdkTypes.HMSAudioTrackSettings>,\n ) {\n const track = this.hmsSDKTracks[trackID] as SDKHMSLocalAudioTrack;\n if (track) {\n await track.setSettings(settings);\n } else {\n this.logPossibleInconsistency(`local track ${trackID} not present, unable to set settings`);\n }\n }\n\n private getMediaSettings(sdkPeer: sdkTypes.HMSPeer): Partial<HMSMediaSettings> {\n const settings = this.store.getState(selectLocalMediaSettings);\n const audioTrack = sdkPeer.audioTrack as SDKHMSLocalAudioTrack;\n const videoTrack = sdkPeer.videoTrack as SDKHMSLocalVideoTrack;\n return {\n audioInputDeviceId:\n audioTrack && audioTrack.enabled\n ? audioTrack.getMediaTrackSettings()?.deviceId\n : settings.audioInputDeviceId,\n videoInputDeviceId:\n videoTrack && videoTrack.enabled\n ? videoTrack.getMediaTrackSettings()?.deviceId\n : settings.videoInputDeviceId,\n audioOutputDeviceId: this.sdk.getAudioOutput().getDevice()?.deviceId,\n };\n }\n\n private setTrackVolume(value: number, trackId: HMSTrackID) {\n const track = this.hmsSDKTracks[trackId];\n if (track) {\n if (track instanceof SDKHMSAudioTrack) {\n track.setVolume(value);\n this.setState(draftStore => {\n const track = draftStore.tracks[trackId];\n if (track) {\n track.volume = value;\n }\n }, 'trackVolume');\n } else {\n HMSLogger.w(`track ${trackId} is not an audio track`);\n }\n } else {\n this.logPossibleInconsistency(`track ${trackId} not present, unable to set volume`);\n }\n }\n\n /**\n * Tells if the trackID is for local peer and video unmute is in process\n * @private\n */\n private localAndVideoUnmuting(trackID: string) {\n const localPeer = this.store.getState(selectLocalPeer);\n if (localPeer.videoTrack !== trackID) {\n return false;\n }\n const displayEnabled = this.store.getState(selectIsLocalVideoDisplayEnabled);\n const actuallyEnabled = this.store.getState(selectIsLocalVideoEnabled);\n return displayEnabled && !actuallyEnabled;\n }\n\n private logPossibleInconsistency(inconsistency: string) {\n HMSLogger.w('possible inconsistency detected - ', inconsistency);\n }\n\n private async addRemoveVideoPlugin(\n plugin: HMSVideoPlugin,\n action: 'add' | 'remove',\n pluginFrameRate?: number,\n ) {\n if (!plugin) {\n HMSLogger.w('Invalid plugin received in store');\n return;\n }\n const trackID = this.store.getState(selectLocalVideoTrackID);\n if (trackID) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack) {\n if (action === 'add') {\n await (sdkTrack as SDKHMSLocalVideoTrack).addPlugin(plugin, pluginFrameRate);\n } else if (action === 'remove') {\n await (sdkTrack as SDKHMSLocalVideoTrack).removePlugin(plugin);\n }\n this.syncRoomState(`${action}VideoPlugin`);\n } else {\n this.logPossibleInconsistency(`track ${trackID} not present, unable to remove plugin`);\n }\n }\n }\n private async addRemoveAudioPlugin(plugin: HMSAudioPlugin, action: 'add' | 'remove') {\n if (!plugin) {\n HMSLogger.w('Invalid plugin received in store');\n return;\n }\n const trackID = this.store.getState(selectLocalAudioTrackID);\n if (trackID) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack) {\n if (action === 'add') {\n await (sdkTrack as SDKHMSLocalAudioTrack).addPlugin(plugin);\n } else if (action === 'remove') {\n await (sdkTrack as SDKHMSLocalAudioTrack).removePlugin(plugin);\n }\n this.syncRoomState(`${action}AudioPlugin`);\n } else {\n this.logPossibleInconsistency(`track ${trackID} not present, unable to remove plugin`);\n }\n }\n }\n\n /**\n * In case of replace track id is changed but not in store. Given the store id, check the real id\n * sdk is using to refer to the track and match them.\n */\n private isSameStoreSDKTrack(sdkTrackID: string, storeTrackID?: string): boolean {\n if (!storeTrackID) {\n return false;\n }\n return this.hmsSDKTracks[storeTrackID]?.trackId === sdkTrackID;\n }\n\n /**\n * convert new role change requests to store format and save.\n * keep only one request at a time in store till we figure out how to handle multiple requests at the same time\n */\n private onRoleChangeRequest(request: SDKHMSRoleChangeRequest) {\n this.setState(store => {\n if (store.roleChangeRequests.length === 0) {\n store.roleChangeRequests.push(SDKToHMS.convertRoleChangeRequest(request));\n }\n }, 'roleChangeRequest');\n }\n\n private removeRoleChangeRequest(toRemove: HMSRoleChangeRequest) {\n this.setState(store => {\n const index = store.roleChangeRequests.findIndex(req => {\n return req.token === toRemove.token;\n });\n if (index !== -1) {\n store.roleChangeRequests.splice(index, 1);\n }\n }, 'removeRoleChangeRequest');\n }\n\n private onRoleUpdate() {\n this.syncRoomState('roleUpdate');\n }\n\n private getStoreLocalTrackIDfromSDKTrack(sdkTrack: SDKHMSLocalTrack) {\n const trackIDs = this.store.getState(selectLocalTrackIDs);\n return trackIDs.find(trackID => this.hmsSDKTracks[trackID].trackId === sdkTrack.trackId);\n }\n\n private setProgress = ({ type, progress }: sdkTypes.HMSPlaylistProgressEvent) => {\n this.setState(draftStore => {\n draftStore.playlist[type].progress = progress;\n draftStore.playlist[type].currentTime = this.sdk.getPlaylistManager().getCurrentTime(type);\n }, 'playlistProgress');\n };\n\n private syncPlaylistState = (action: string) => {\n this.setState(draftStore => {\n Object.assign(draftStore.playlist, SDKToHMS.convertPlaylist(this.sdk.getPlaylistManager()));\n }, action);\n };\n\n /**\n * Handle store update on remote track changes\n * @param {string} action - 'trackAdded' | 'trackUpdate'\n * @param {SDKHMSTrack} track - track added/updated\n * @param {sdkTypes.HMSPeer}peer - peer on which track is added/updated\n */\n private syncRemoteTrackState = (\n action: 'trackAdded' | 'trackUpdate',\n track: SDKHMSTrack,\n peer: sdkTypes.HMSPeer,\n ) => {\n this.setState(draftStore => {\n let draftPeer = draftStore.peers[peer.peerId];\n /**\n * in preview -> leave -> join flow or join -> leave -> join flow,\n * since peer will be cleared by leave, set peer again in the store\n **/\n if (!draftPeer) {\n const hmsPeer = SDKToHMS.convertPeer(peer) as HMSPeer;\n draftStore.peers[peer.peerId] = hmsPeer;\n draftPeer = hmsPeer;\n }\n const hmsTrack = SDKToHMS.convertTrack(track, peer.peerId);\n if (action === 'trackAdded') {\n draftStore.tracks[hmsTrack.id] = hmsTrack;\n this.updateTracksInPeer(peer, draftPeer, hmsTrack);\n } else if (draftStore.tracks[hmsTrack.id]) {\n Object.assign(draftStore.tracks[hmsTrack.id], hmsTrack);\n } else {\n this.logPossibleInconsistency(`track ${hmsTrack.id} not present, unable to update track`);\n }\n this.hmsSDKTracks[track.trackId] = track;\n }, action);\n };\n\n private peerUpdateInternal(type: sdkTypes.HMSPeerUpdate, sdkPeer: sdkTypes.HMSPeer) {\n // store peer in case it doesn't exist later(will happen if event is peer leave)\n let peer = this.store.getState(selectPeerByID(sdkPeer.peerId));\n let actionName = 'peerUpdate';\n if (type === sdkTypes.HMSPeerUpdate.PEER_JOINED) {\n actionName = 'peerJoined';\n } else if (type === sdkTypes.HMSPeerUpdate.PEER_LEFT) {\n actionName = 'peerLeft';\n }\n this.setState(draftStore => {\n if (actionName === 'peerLeft') {\n const index = draftStore.room.peers.indexOf(sdkPeer.peerId);\n if (index > -1) {\n draftStore.room.peers.splice(index, 1);\n }\n delete draftStore.peers[sdkPeer.peerId];\n delete this.hmsSDKPeers[sdkPeer.peerId];\n } else {\n const hmsPeer = SDKToHMS.convertPeer(sdkPeer);\n if (draftStore.peers[hmsPeer.id]) {\n Object.assign(draftStore.peers[hmsPeer.id], hmsPeer);\n } else {\n draftStore.peers[hmsPeer.id] = hmsPeer as HMSPeer;\n draftStore.room.peers.push(hmsPeer.id);\n }\n this.hmsSDKPeers[sdkPeer.peerId] = sdkPeer;\n }\n }, actionName);\n // if peer wasn't available before sync(will happen if event is peer join)\n if (!peer) {\n peer = this.store.getState(selectPeerByID(sdkPeer.peerId));\n }\n this.hmsNotifications.sendPeerUpdate(type, peer);\n }\n\n private updateTracksInPeer(peer: sdkTypes.HMSPeer, draftPeer: HMSPeer, hmsTrack: HMSTrack) {\n if (peer.audioTrack?.trackId === hmsTrack.id) {\n draftPeer.audioTrack = hmsTrack.id;\n } else if (peer.videoTrack?.trackId === hmsTrack.id) {\n draftPeer.videoTrack = hmsTrack.id;\n } else if (!draftPeer.auxiliaryTracks.includes(hmsTrack.id)) {\n draftPeer.auxiliaryTracks.push(hmsTrack.id);\n }\n }\n\n /**\n * setState is separate so any future changes to how state change can be done from one place.\n * @param fn\n * @param name\n */\n private setState: NamedSetState<HMSStore> = (fn, name) => {\n return this.store.namedSetState(fn, name);\n };\n}\n","import * as sdkTypes from '../sdkTypes';\nimport { HMSNotificationTypes } from '../../schema';\n\ninterface notifcationMap {\n [key: number]: string;\n}\n\nexport const PEER_NOTIFICATION_TYPES: notifcationMap = {\n [sdkTypes.HMSPeerUpdate.PEER_JOINED]: HMSNotificationTypes.PEER_JOINED,\n [sdkTypes.HMSPeerUpdate.PEER_LEFT]: HMSNotificationTypes.PEER_LEFT,\n [sdkTypes.HMSPeerUpdate.ROLE_UPDATED]: HMSNotificationTypes.ROLE_UPDATED,\n [sdkTypes.HMSPeerUpdate.AUDIO_TOGGLED]: 'PEER_AUDIO_UPDATED',\n [sdkTypes.HMSPeerUpdate.VIDEO_TOGGLED]: 'PEER_VIDEO_UPDATED',\n};\n\nexport const TRACK_NOTIFICATION_TYPES: notifcationMap = {\n [sdkTypes.HMSTrackUpdate.TRACK_ADDED]: HMSNotificationTypes.TRACK_ADDED,\n [sdkTypes.HMSTrackUpdate.TRACK_REMOVED]: HMSNotificationTypes.TRACK_REMOVED,\n [sdkTypes.HMSTrackUpdate.TRACK_MUTED]: HMSNotificationTypes.TRACK_MUTED,\n [sdkTypes.HMSTrackUpdate.TRACK_UNMUTED]: HMSNotificationTypes.TRACK_UNMUTED,\n};\n","import EventEmitter from 'events';\nimport { IHMSNotifications } from '../IHMSNotifications';\nimport { IHMSStore } from '../IHMSStore';\nimport { selectPeerByID, selectTrackByID } from '../selectors';\nimport * as sdkTypes from './sdkTypes';\nimport { PEER_NOTIFICATION_TYPES, TRACK_NOTIFICATION_TYPES } from './common/mapping';\nimport {\n HMSNotification,\n HMSNotificationTypes,\n HMSNotificationSeverity,\n HMSPeer,\n HMSException,\n HMSMessage,\n HMSTrack,\n HMSChangeTrackStateRequest,\n HMSChangeMultiTrackStateRequest,\n HMSLeaveRoomRequest,\n HMSDeviceChangeEvent,\n} from '../schema';\n\nconst HMS_NOTIFICATION_EVENT = 'hmsNotification';\nexport class HMSNotifications implements IHMSNotifications {\n private id: number = 0;\n private eventEmitter: EventEmitter;\n private store: IHMSStore;\n\n constructor(store: IHMSStore) {\n this.store = store;\n this.eventEmitter = new EventEmitter();\n }\n\n onNotification = (cb: (notification: HMSNotification) => void): (() => void) => {\n this.eventEmitter.addListener(HMS_NOTIFICATION_EVENT, cb);\n return () => {\n this.eventEmitter.removeListener(HMS_NOTIFICATION_EVENT, cb);\n };\n };\n\n sendDeviceChange(request: HMSDeviceChangeEvent) {\n const notification = this.createNotification(\n HMSNotificationTypes.DEVICE_CHANGE_UPDATE,\n request,\n request.error ? HMSNotificationSeverity.ERROR : HMSNotificationSeverity.INFO,\n `Selected ${request.type} device - ${request.selection?.label}`,\n );\n this.emitEvent(notification);\n }\n\n sendLeaveRoom(request: HMSLeaveRoomRequest) {\n const notification = this.createNotification(\n request.roomEnded ? HMSNotificationTypes.ROOM_ENDED : HMSNotificationTypes.REMOVED_FROM_ROOM,\n request,\n HMSNotificationSeverity.INFO,\n `${request.roomEnded ? `Room ended` : 'Removed from room'} by ${request.requestedBy.name}`,\n );\n this.emitEvent(notification);\n }\n\n sendPeerUpdate(type: sdkTypes.HMSPeerUpdate, peer: HMSPeer | null) {\n const hmsPeer = this.store.getState(selectPeerByID(peer?.id)) || peer;\n const notificationType = PEER_NOTIFICATION_TYPES[type];\n if (notificationType) {\n const notification = this.createNotification(\n notificationType,\n hmsPeer,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n }\n\n sendTrackUpdate(type: sdkTypes.HMSTrackUpdate, trackID: string) {\n const hmsTrack = this.store.getState(selectTrackByID(trackID));\n const notificationType = TRACK_NOTIFICATION_TYPES[type];\n if (notificationType) {\n const notification = this.createNotification(\n notificationType,\n hmsTrack,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n }\n\n sendMessageReceived(message: HMSMessage) {\n const notification = this.createNotification(\n HMSNotificationTypes.NEW_MESSAGE,\n message,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendError(error: HMSException) {\n const notification = this.createNotification(\n HMSNotificationTypes.ERROR,\n error,\n HMSNotificationSeverity.ERROR,\n );\n this.emitEvent(notification);\n }\n\n sendReconnecting(error: HMSException) {\n const notification = this.createNotification(\n HMSNotificationTypes.RECONNECTING,\n error,\n HMSNotificationSeverity.ERROR,\n );\n this.emitEvent(notification);\n }\n\n sendReconnected() {\n const notification = this.createNotification(\n HMSNotificationTypes.RECONNECTED,\n null,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendChangeTrackStateRequest(request: HMSChangeTrackStateRequest) {\n const notification = this.createNotification(\n HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST,\n request,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendChangeMultiTrackStateRequest(request: HMSChangeMultiTrackStateRequest) {\n const notification = this.createNotification(\n HMSNotificationTypes.CHANGE_MULTI_TRACK_STATE_REQUEST,\n request,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n private emitEvent(notification: HMSNotification) {\n this.eventEmitter.emit(HMS_NOTIFICATION_EVENT, notification);\n }\n\n private createNotification(\n type: string,\n data?:\n | HMSPeer\n | HMSTrack\n | HMSMessage\n | HMSException\n | HMSChangeTrackStateRequest\n | HMSChangeMultiTrackStateRequest\n | HMSLeaveRoomRequest\n | HMSDeviceChangeEvent\n | null,\n severity?: HMSNotificationSeverity,\n message: string = '',\n ): HMSNotification {\n this.id++;\n return {\n id: this.id,\n type,\n message,\n data,\n severity,\n };\n }\n}\n","import produce from 'immer';\nimport create, {\n StateSelector,\n StoreApi,\n SetState,\n StateSliceListener,\n EqualityChecker,\n PartialState,\n State,\n} from 'zustand/vanilla';\nimport shallow from 'zustand/shallow';\nimport { HMSSdk } from '@100mslive/hms-video';\nimport { IHMSActions } from '../IHMSActions';\nimport { HMSSDKActions } from './HMSSDKActions';\nimport { IHMSStore, IHMSStoreReadOnly } from '../IHMSStore';\nimport { createDefaultStoreState, HMSStore } from '../schema';\nimport { HMSNotifications } from './HMSNotifications';\nimport { IHMSNotifications } from '../IHMSNotifications';\nimport { NamedSetState } from './internalTypes';\n\nexport class HMSReactiveStore {\n private readonly actions: IHMSActions;\n private readonly store: IHMSStore;\n private readonly notifications: HMSNotifications;\n private initialTriggerOnSubscribe: boolean;\n\n constructor(hmsStore?: IHMSStore, hmsActions?: IHMSActions, hmsNotifications?: HMSNotifications) {\n if (hmsStore) {\n this.store = hmsStore;\n } else {\n this.store = HMSReactiveStore.createNewHMSStore();\n }\n if (hmsNotifications) {\n this.notifications = hmsNotifications;\n } else {\n this.notifications = new HMSNotifications(this.store);\n }\n if (hmsActions) {\n this.actions = hmsActions;\n } else {\n this.actions = new HMSSDKActions(this.store, new HMSSdk(), this.notifications);\n }\n this.initialTriggerOnSubscribe = false;\n }\n\n /**\n * By default store.subscribe does not call the handler with the current state at time of subscription,\n * this behaviour can be modified by calling this function. What it means is that instead of calling the\n * handler only for changes which happen post subscription we'll also call it exactly once at the time\n * of subscription with the current state. This behaviour is similar to that of BehaviourSubject in rxjs.\n * This will be an irreversible change\n *\n * Note: you don't need this if you're using our react hooks, it takes care of this requirement.\n */\n triggerOnSubscribe(): void {\n if (this.initialTriggerOnSubscribe) {\n // already done\n return;\n }\n HMSReactiveStore.makeStoreTriggerOnSubscribe(this.store);\n this.initialTriggerOnSubscribe = true;\n }\n\n /**\n * A reactive store which has a subscribe method you can use in combination with selectors\n * to subscribe to a subset of the store. The store serves as a single source of truth for\n * all data related to the corresponding HMS Room.\n */\n getStore(): IHMSStoreReadOnly {\n return this.store;\n }\n\n /**\n * Any action which may modify the store or may need to talk to the SDK will happen\n * through the IHMSActions instance returned by this\n */\n getHMSActions(): IHMSActions {\n return this.actions;\n }\n\n /**\n * This return notification handler function to which you can pass your callback to\n * receive notifications like peer joined, peer left, etc. to show in your UI or use\n * for analytics\n */\n getNotifications(): IHMSNotifications {\n return { onNotification: this.notifications.onNotification };\n }\n\n /**\n * @internal\n */\n static createNewHMSStore(): IHMSStore {\n const hmsStore = create<HMSStore>(() => createDefaultStoreState());\n // make set state immutable, by passing functions through immer\n const savedSetState = hmsStore.setState;\n hmsStore.setState = (partial: any) => {\n const nextState = typeof partial === 'function' ? produce(partial) : partial;\n savedSetState(nextState);\n };\n // add option to pass selector to getState\n const prevGetState = hmsStore.getState;\n hmsStore.getState = <StateSlice>(selector?: StateSelector<HMSStore, StateSlice>) => {\n return selector ? selector(prevGetState()) : prevGetState();\n };\n HMSReactiveStore.useShallowCheckInSubscribe(hmsStore);\n const namedSetState = HMSReactiveStore.setUpDevtools(hmsStore, 'HMSStore');\n return { ...hmsStore, namedSetState };\n }\n\n /**\n * @internal\n */\n static makeStoreTriggerOnSubscribe(store: IHMSStore) {\n const prevSubscribe = store.subscribe;\n store.subscribe = <StateSlice>(\n listener: StateSliceListener<StateSlice>,\n selector?: StateSelector<HMSStore, StateSlice>,\n equalityFn?: EqualityChecker<StateSlice>,\n ): (() => void) => {\n // initial call, the prev state will always be null for this\n listener(store.getState(selector), (undefined as unknown) as StateSlice);\n // then subscribe\n return prevSubscribe(listener, selector!, equalityFn);\n };\n }\n\n /**\n * use shallow equality check by default for subscribe to optimize for array/object selectors.\n * by default zustand does only reference matching so something like, getPeers for eg. would trigger\n * the corresponding component even if peers didn't actually change, as selectPeers creates a new array everytime.\n * Although the array reference changes, the order of peers and peer objects don't themselves change in this case,\n * and a shallow check avoids that triggering.\n * @private\n */\n private static useShallowCheckInSubscribe(hmsStore: StoreApi<HMSStore>) {\n const prevSubscribe = hmsStore.subscribe;\n hmsStore.subscribe = <StateSlice>(\n listener: StateSliceListener<StateSlice>,\n selector?: StateSelector<HMSStore, StateSlice>,\n equalityFn?: EqualityChecker<StateSlice>,\n ): (() => void) => {\n if (!selector) {\n selector = (store): StateSlice => (store as unknown) as StateSlice;\n }\n equalityFn = equalityFn || shallow;\n return prevSubscribe(listener, selector, equalityFn);\n };\n }\n\n /**\n * @private\n * @privateRemarks\n * sets up redux devtools for the store, so redux extension can be used to visualize the store.\n * zustand's default devtool middleware only enhances the set function, we're here creating another nameSetState in\n * IHMStore which behaves like setState but takes an extra parameter for action name\n * https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Methods.md\n * modified version of zustand's devtools - https://github.com/pmndrs/zustand/blob/v3.5.7/src/middleware.ts#L46\n */\n private static setUpDevtools<T extends State>(\n api: StoreApi<T>,\n prefix: string,\n ): NamedSetState<HMSStore> {\n let extension;\n try {\n extension =\n (window as any).__REDUX_DEVTOOLS_EXTENSION__ ||\n (window as any).top.__REDUX_DEVTOOLS_EXTENSION__;\n } catch {}\n if (!extension) {\n return (fn: any) => {\n api.setState(fn);\n };\n }\n const devtools = extension.connect(HMSReactiveStore.devtoolsOptions(prefix));\n devtools.prefix = prefix ? `${prefix} > ` : '';\n const savedSetState = api.setState;\n api.setState = (fn: any) => {\n savedSetState(fn);\n devtools.send(`${devtools.prefix}setState`, api.getState());\n };\n\n devtools.subscribe(HMSReactiveStore.devtoolsSubscribe(devtools, api, savedSetState));\n\n devtools.send('setUpStore', api.getState());\n\n return (fn: any, action?: string) => {\n savedSetState(fn);\n const actionName = action ? action : `${devtools.prefix}action`;\n devtools.send(actionName, api.getState());\n };\n }\n\n /**\n * https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md\n */\n private static devtoolsOptions(prefix: string) {\n return {\n name: prefix,\n actionsBlacklist: ['audioLevel', 'playlistProgress'], // very high frequency update, pollutes the action history\n };\n }\n\n /**\n * redux devtools allows for time travel debugging where it sends an action to update the store, users can\n * also export and import state in the devtools, listen to the corresponding functions from devtools and take\n * required action.\n * @param devtools - reference to devtools extension object\n * @param api\n * @param savedSetState - setState saved before its modified to update devtools\n * @private\n */\n private static devtoolsSubscribe<T extends State>(\n devtools: any,\n api: StoreApi<T>,\n savedSetState: SetState<T>,\n ) {\n // disabling complexity check instead of refactoring so as to keep the code close to zustand's and make\n // any future update based on upstream changes easier.\n // eslint-disable-next-line complexity\n return (message: any) => {\n if (message.type === 'DISPATCH' && message.state) {\n const ignoreState = ['JUMP_TO_ACTION', 'JUMP_TO_STATE'].includes(message.payload.type);\n if (!ignoreState) {\n // manual dispatch from the extension\n api.setState(JSON.parse(message.state));\n } else {\n // for time travel, no need to add new state changes in devtools\n savedSetState(JSON.parse(message.state));\n }\n } else if (message.type === 'DISPATCH' && message.payload?.type === 'COMMIT') {\n devtools.init(api.getState());\n } else if (message.type === 'DISPATCH' && message.payload?.type === 'IMPORT_STATE') {\n const actions = message.payload.nextLiftedState?.actionsById;\n const computedStates = message.payload.nextLiftedState?.computedStates || [];\n\n computedStates.forEach(({ state }: { state: PartialState<T> }, index: number) => {\n const action = actions[index] || `${devtools.prefix}setState`;\n if (index === 0) {\n devtools.init(state);\n } else {\n savedSetState(state);\n devtools.send(action, api.getState());\n }\n });\n }\n };\n }\n}\n"],"names":["undefined","HMSRoomState","createDefaultStoreState","room","id","isConnected","name","peers","shareableLink","localPeer","hasWaitingRoom","roomState","Disconnected","recording","browser","running","server","rtmp","tracks","playlist","audio","list","selection","hasPrevious","hasNext","progress","volume","currentTime","video","messages","byID","allIDs","speakers","settings","audioInputDeviceId","audioOutputDeviceId","videoInputDeviceId","devices","audioInput","audioOutput","videoInput","roles","roleChangeRequests","errors","HMSMessageType","HMSNotificationSeverity","HMSNotificationTypes","HMSPlaylistType","mergeNewPeersInDraft","draftPeers","newPeers","newHmsTracks","newHmsSDkTracks","peerIDs","union","Object","keys","peerID","oldPeer","newPeer","isEntityUpdated","areArraysEqual","auxiliaryTracks","handleLocalVideoReplaceTrack","assign","isEntityRemoved","isEntityAdded","mergeNewTracksInDraft","draftTracks","newTracks","trackIDs","trackID","oldTrack","newTrack","mergeTrackArrayFields","plugins","layerDefinitions","oldItem","newItem","arr1","arr2","length","i","set","Set","elem","add","Array","from","isLocal","videoTrack","SDKToHMS","convertPeer","sdkPeer","peerId","roleName","role","trackId","audioTrack","map","t","customerUserId","customerDescription","convertTrack","sdkTrack","track","source","type","enabled","displayEnabled","enrichTrack","mediaSettings","getMediaTrackSettings","displaySurface","height","width","deviceID","deviceId","SDKHMSRemoteAudioTrack","getVolume","enrichVideoTrack","enrichPluginsDetails","SDKHMSRemoteVideoTrack","layer","getSimulcastLayer","degraded","getSimulcastDefinitions","SDKHMSLocalVideoTrack","SDKHMSLocalAudioTrack","getPlugins","convertRoom","sdkRoom","convertMessage","sdkMessage","sender","senderName","senderRole","senderUserId","recipientPeer","recipientRoles","time","message","convertRoles","sdkRoles","forEach","convertRoleChangeRequest","req","requestedBy","token","convertException","sdkException","code","action","description","isTerminal","nativeError","timestamp","Date","convertDeviceChangeUpdate","sdkDeviceChangeEvent","convertedData","error","convertPlaylist","playlistManager","audioPlaylist","getConvertedPlaylistType","videoPlaylist","convertedPlaylist","currentSelection","getCurrentSelection","getCurrentProgress","isPlaying","getList","currentIndex","getCurrentIndex","playlistItem","isSelected","url","selected","playing","getCurrentTime","convertRecordingRTMPState","getPeerTracksByCondition","peer","trackCheckFn","isScreenShare","isAudio","isVideo","isAudioPlaylist","isVideoPlaylist","isDegraded","Boolean","isTrackEnabled","store","isTrackDisplayEnabled","selectRoom","selectPeersMap","selectMessagesMap","selectMessageIDsInOrder","selectTracksMap","selectLocalMediaSettings","selectDevices","selectSpeakers","selectIsConnectedToRoom","createSelector","selectPeerCount","selectPeers","storePeers","selectTracks","storeTracks","values","selectLocalPeer","selectLocalPeerID","selectLocalAudioTrackID","selectLocalVideoTrackID","selectLocalAuxiliaryTrackIDs","selectLocalTrackIDs","audioTrackID","videoTrackID","auxiliaryTrackIDs","unshift","selectRemotePeers","filter","p","selectDominantSpeaker","peersMap","speakersInOrder","entries","sort","s1","s2","s1Level","audioLevel","s2Level","selectIsLocalAudioEnabled","selectIsLocalVideoEnabled","selectIsLocalVideoDisplayEnabled","selectIsLocalScreenShared","tracksMap","selectPeerScreenSharing","screensharePeer","selectIsSomeoneScreenSharing","selectPeerSharingAudio","selectPeersScreenSharing","videoPeers","audioPeers","push","concat","selectPeerSharingVideoPlaylist","selectDegradedTracks","selectHMSMessagesCount","messageIDs","selectUnreadHMSMessagesCount","m","read","selectHMSMessages","msgIDs","msgMap","msgId","selectRoomState","selectIsInPreview","Preview","selectRoomStarted","selectRolesMap","selectAvailableRoleNames","rolesMap","selectLocalPeerRole","selectIsAllowedToSubscribe","subscribeParams","subscribeToRoles","selectPermissions","permissions","selectRecordingState","selectRTMPState","selectPlaylistMap","selectPlaylistSelection","selectPlaylistProgress","selectPlaylistCurrentTime","selectPlaylistVolume","selectPlaylist","storePlaylist","selectPlaylistSelectedItem","selectAudioPlaylist","selectedItem","selectVideoPlaylist","HMS_STORE_TAG","HMSLogger","v","tag","data","log","HMSLogLevel","VERBOSE","d","DEBUG","INFO","w","WARN","e","ERROR","level","valueOf","console","debug","info","warn","byIDCurry","selector","selectPeerID","_store","selectTrackID","selectRoleName","selectPeerByIDBare","selectTrackByIDBare","selectPeerByID","selectPeerNameByID","selectTrackByID","selectVideoTrackByPeerID","selectAudioTrackByPeerID","selectCameraStreamByPeerID","selectAuxiliaryTracksByPeerID","selectSpeakerByTrackID","selectTrackAudioByID","speaker","selectSpeakerByPeerID","peerAudioTrack","selectPeerAudioByID","selectAuxiliaryAudioByPeerID","find","selectVideoPlaylistVideoTrackByPeerID","selectVideoPlaylistAudioTrackByPeerID","selectAudioPlaylistTrackByPeerID","selectScreenSharesByPeerId","selectScreenShareByPeerID","screenshare","selectScreenShareAudioByPeerID","selectIsPeerAudioEnabled","selectIsPeerVideoEnabled","selectIsAudioLocallyMuted","selectIsLocallyMutedByPeerID","selectIsScreenShareLocallyMutedByPeerID","selectAudioTrackVolume","selectAudioVolumeByPeerID","selectScreenshareAudioVolumeByPeerID","selectSimulcastLayerByTrack","selectMessagesByPeerIDInternal","localPeerID","includes","selectMessagesByRoleInternal","selectBroadcastMessages","selectUnreadMessageCountByRole","selectUnreadMessageCountByPeerID","selectBroadcastMessagesUnreadCount","selectMessagesByPeerID","selectMessagesByRole","selectMessagesUnreadCountByRole","selectMessagesUnreadCountByPeerID","selectPeersWithAudioStatus","participants","isAudioEnabled","selectRoleChangeStoreRequest","selectRoleChangeRequest","request","selectIsAllowedToPublish","screen","publishParams","allowed","selectRoleByRoleName","selectLocalVideoPlugins","selectLocalAudioPlugins","selectIsLocalVideoPluginPresent","pluginName","selectIsLocalAudioPluginPresent","isRemoteTrack","HMSRemoteAudioTrack","HMSRemoteVideoTrack","HMSPlaylist","syncPlaylistState","play","setEnabled","pause","getState","playNext","playPrevious","seek","seekValue","seekTo","setVolume","setList","stop","HMSSDKActions","sdk","notificationManager","setState","draftStore","getPlaylistManager","draftPeer","hmsPeer","hmsTrack","updateTracksInPeer","logPossibleInconsistency","hmsSDKTracks","fn","namedSetState","hmsNotifications","unblockAudio","getAudioOutput","unblockAutoplay","value","setTrackVolume","syncRoomState","setAudioOutputDevice","deviceInfo","setDevice","setPreferredLayer","preferLayer","updateVideoLayer","preview","config","isRoomJoinCalled","Connecting","sdkPreviewWithListeners","join","sdkJoinWithListeners","err","leave","hasRoomStarted","then","resetState","setScreenShareEnabled","audioOnly","startScreenShare","stopScreenShare","addTrack","removeTrack","setLocalAudioEnabled","setEnabledTrack","setLocalVideoEnabled","alreadyInSameState","setEnabledSDKTrack","sendError","sdkTypes","TRACK_UNMUTED","TRACK_MUTED","sendTrackUpdate","setAudioSettings","setSDKLocalAudioTrackSettings","setVideoSettings","setSDKLocalVideoTrackSettings","sendMessage","sendBroadcastMessage","updateMessageInStore","sendGroupMessage","storeRoles","hmsRoles","sendDirectMessage","hmsSDKPeers","messageInput","Error","JSON","stringify","hmsMessage","onHMSMessage","setMessageRead","readStatus","messageId","attachVideo","videoElement","localAndVideoUnmuting","Promise","resolve","unsub","subscribe","attachVideoInternal","detachVideo","removeSink","addPluginToVideoTrack","plugin","pluginFrameRate","addRemoveVideoPlugin","addPluginToAudioTrack","addRemoveAudioPlugin","removePluginFromVideoTrack","removePluginFromAudioTrack","changeRole","forPeerId","toRole","force","acceptChangeRole","sdkRequest","removeRoleChangeRequest","rejectChangeRole","endRoom","lock","reason","removePeer","startRTMPOrRecording","params","stopRTMPAndRecording","setRemoteTrackEnabled","changeTrackState","isArray","setRemoteTracksEnabled","changeMultiTrackState","setLogLevel","onJoin","bind","onRoomUpdate","onPeerUpdate","onTrackUpdate","onMessageReceived","onError","onReconnected","onReconnecting","onRoleChangeRequest","onRoleUpdate","onDeviceChange","onChangeTrackStateRequest","onChangeMultiTrackStateRequest","onRemovedFromRoom","addAudioListener","onAudioLevelUpdate","sendLeaveRoom","roomEnded","event","getMediaSettings","notification","sendDeviceChange","onPreview","isScreenShared","addSink","newHmsPeers","newHmsPeerIDs","newMediaSettings","sdkPeers","getPeers","sdkTracks","getRecordingState","getRTMPState","getRoles","timeEnd","Connected","onProgress","setProgress","onNewTrackStart","item","onPlaylistEnded","BECAME_DOMINANT_SPEAKER","RESIGNED_DOMINANT_SPEAKER","sendPeerUpdate","peerUpdateInternal","TRACK_REMOVED","handleTrackRemove","actionName","TRACK_ADDED","syncRemoteTrackState","sendMessageReceived","String","sdkSpeakers","trackIDAudioLevelMap","sdkSpeaker","speakerEntries","storeTrackID","getStoreLocalTrackIDfromSDKTrack","sendChangeTrackStateRequest","sendChangeMultiTrackStateRequest","sendReconnected","sdkError","sendReconnecting","Reconnecting","Failed","numExistingErrors","draft","isSameStoreSDKTrack","auxiliaryIndex","indexOf","splice","setSettings","getDevice","SDKHMSAudioTrack","actuallyEnabled","inconsistency","addPlugin","removePlugin","sdkTrackID","toRemove","index","findIndex","PEER_JOINED","PEER_LEFT","PEER_NOTIFICATION_TYPES","ROLE_UPDATED","AUDIO_TOGGLED","VIDEO_TOGGLED","TRACK_NOTIFICATION_TYPES","HMS_NOTIFICATION_EVENT","HMSNotifications","cb","eventEmitter","addListener","removeListener","EventEmitter","createNotification","DEVICE_CHANGE_UPDATE","label","emitEvent","ROOM_ENDED","REMOVED_FROM_ROOM","notificationType","NEW_MESSAGE","RECONNECTING","RECONNECTED","CHANGE_TRACK_STATE_REQUEST","CHANGE_MULTI_TRACK_STATE_REQUEST","emit","severity","HMSReactiveStore","hmsStore","hmsActions","createNewHMSStore","notifications","actions","HMSSdk","initialTriggerOnSubscribe","triggerOnSubscribe","makeStoreTriggerOnSubscribe","getStore","getHMSActions","getNotifications","onNotification","create","savedSetState","partial","nextState","produce","prevGetState","useShallowCheckInSubscribe","setUpDevtools","prevSubscribe","listener","equalityFn","shallow","api","prefix","extension","window","__REDUX_DEVTOOLS_EXTENSION__","top","devtools","connect","devtoolsOptions","send","devtoolsSubscribe","actionsBlacklist","state","ignoreState","payload","parse","init","nextLiftedState","actionsById","computedStates"],"mappings":"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"}
1
+ {"version":3,"file":"hms-video-store.cjs.development.js","sources":["../node_modules/regenerator-runtime/runtime.js","../src/core/schema/room.ts","../src/core/schema/schema.ts","../src/core/schema/message.ts","../src/core/schema/notification.ts","../src/core/schema/playlist.ts","../src/core/hmsSDKStore/sdkUtils/storeMergeUtils.ts","../src/core/hmsSDKStore/adapter.ts","../src/core/selectors/selectorUtils.ts","../src/core/selectors/selectors.ts","../src/core/selectors/playlistselectors.ts","../src/common/ui-logger.ts","../src/core/selectors/selectorsByID.ts","../src/core/selectors/derivedSelectors.ts","../src/core/selectors/selectorsByReference.ts","../src/core/hmsSDKStore/sdkUtils/sdkUtils.ts","../src/core/hmsSDKStore/HMSPlaylist.ts","../src/core/hmsSDKStore/HMSSDKActions.ts","../src/core/hmsSDKStore/common/mapping.ts","../src/core/hmsSDKStore/HMSNotifications.ts","../src/core/hmsSDKStore/HMSReactiveStore.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","import { HMSRecording, HMSRTMP } from '@100mslive/hms-video';\nimport { HMSPeerID } from './peer';\n\nexport type HMSRoomID = string;\n\nexport enum HMSRoomState {\n Disconnected = 'Disconnected',\n Preview = 'Preview',\n Connecting = 'Connecting',\n Connected = 'Connected',\n Reconnecting = 'Reconnecting',\n Failed = 'Failed',\n}\n\nexport interface HMSRoom {\n id: HMSRoomID;\n name: string;\n isConnected?: boolean;\n peers: HMSPeerID[];\n localPeer: HMSPeerID;\n shareableLink: string;\n hasWaitingRoom: boolean;\n roomState: HMSRoomState;\n recording: HMSRecording;\n rtmp: HMSRTMP;\n}\n","import { HMSPeer, HMSPeerID, HMSTrackID, HMSTrack, HMSSpeaker } from './peer';\nimport { HMSMessage, HMSMessageID } from './message';\nimport { HMSRoom, HMSRoomState } from './room';\nimport { HMSMediaSettings } from './settings';\nimport { DeviceMap } from '../hmsSDKStore/sdkTypes';\nimport { HMSRole } from './role';\nimport { HMSRoleChangeStoreRequest } from './requests';\nimport { HMSException } from './error';\nimport { HMSPlaylist } from './playlist';\n\n/*\n * Defines the schema of the central store. UI Components are aware of the presence\n * of this central store. This is the global state - the single source of immutable truth.\n */\nexport interface HMSStore {\n room: HMSRoom;\n peers: Record<HMSPeerID, HMSPeer>;\n speakers: Record<HMSTrackID, HMSSpeaker>;\n tracks: Record<HMSTrackID, HMSTrack>;\n playlist: HMSPlaylist<any>;\n messages: {\n byID: Record<HMSMessageID, HMSMessage>;\n allIDs: HMSMessageID[];\n };\n settings: HMSMediaSettings;\n devices: DeviceMap;\n roles: Record<string, HMSRole>;\n roleChangeRequests: HMSRoleChangeStoreRequest[];\n errors: HMSException[]; // for the convenience of debugging and seeing any error in devtools\n}\n\n/**\n * @internal\n */\nexport const createDefaultStoreState = (): HMSStore => {\n return {\n room: {\n id: '',\n isConnected: false,\n name: '',\n peers: [],\n shareableLink: '',\n localPeer: '',\n hasWaitingRoom: false,\n roomState: HMSRoomState.Disconnected,\n recording: {\n browser: {\n running: false,\n },\n server: {\n running: false,\n },\n },\n rtmp: {\n running: false,\n },\n },\n peers: {},\n tracks: {},\n playlist: {\n audio: {\n list: {},\n selection: { id: '', hasPrevious: false, hasNext: false },\n progress: 0,\n volume: 0,\n currentTime: 0,\n },\n video: {\n list: {},\n selection: { id: '', hasPrevious: false, hasNext: false },\n progress: 0,\n volume: 0,\n currentTime: 0,\n },\n },\n messages: { byID: {}, allIDs: [] },\n speakers: {},\n settings: {\n audioInputDeviceId: '',\n audioOutputDeviceId: '',\n videoInputDeviceId: '',\n },\n devices: {\n audioInput: [],\n audioOutput: [],\n videoInput: [],\n },\n roles: {},\n roleChangeRequests: [],\n errors: [],\n };\n};\n","import { HMSPeerID } from './peer';\nimport { HMSRoleName } from './role';\n\nexport type HMSMessageID = string;\n\n/**\n * @internal\n */\nexport enum HMSMessageType {\n CHAT = 'chat',\n}\n\nexport interface HMSMessage {\n id: HMSMessageID;\n sender: HMSPeerID;\n senderName: string;\n senderUserId?: string;\n senderRole?: string;\n recipientPeer?: HMSPeerID;\n recipientRoles?: HMSRoleName[];\n time: Date;\n read: boolean;\n type: string;\n message: any;\n}\n\n/**\n * @internal\n */\nexport interface HMSMessageInput {\n recipientPeer?: HMSPeerID;\n recipientRoles?: HMSRoleName[];\n type?: string;\n message: any;\n}\n","export interface HMSNotification {\n id: number;\n type: string;\n message: string;\n /**\n * HMSPeer | HMSTrack | HMSMessage | HMSException\n */\n data?: any;\n severity?: HMSNotificationSeverity;\n}\nexport enum HMSNotificationSeverity {\n INFO = 'info',\n ERROR = 'error',\n CRITICAL = 'critical',\n}\n\nexport enum HMSNotificationTypes {\n PEER_JOINED = 'PEER_JOINED',\n PEER_LEFT = 'PEER_LEFT',\n PEER_LIST = 'PEER_LIST',\n NEW_MESSAGE = 'NEW_MESSAGE',\n ERROR = 'ERROR',\n RECONNECTING = 'RECONNECTING',\n RECONNECTED = 'RECONNECTED',\n TRACK_ADDED = 'TRACK_ADDED',\n TRACK_REMOVED = 'TRACK_REMOVED',\n TRACK_MUTED = 'TRACK_MUTED',\n TRACK_UNMUTED = 'TRACK_UNMUTED',\n ROLE_CHANGE_REQUEST = 'ROLE_CHANGE_REQUEST',\n ROLE_UPDATED = 'ROLE_UPDATED',\n CHANGE_TRACK_STATE_REQUEST = 'CHANGE_TRACK_STATE_REQUEST',\n CHANGE_MULTI_TRACK_STATE_REQUEST = 'CHANGE_MULTI_TRACK_STATE_REQUEST',\n ROOM_ENDED = 'ROOM_ENDED',\n REMOVED_FROM_ROOM = 'REMOVED_FROM_ROOM',\n DEVICE_CHANGE_UPDATE = 'DEVICE_CHANGE_UPDATE',\n}\n","import { HMSStore } from '../schema';\n\nexport enum HMSPlaylistType {\n audio = 'audio',\n video = 'video',\n}\nexport interface HMSPlaylistItem<T> {\n name: string;\n id: string;\n metadata?: T;\n url: string;\n type: HMSPlaylistType;\n duration?: number;\n playing: boolean;\n selected: boolean;\n}\n\nexport interface HMSPlaylistSelection {\n id: string;\n hasPrevious: boolean;\n hasNext: boolean;\n}\n\nexport interface HMSPlaylist<T> {\n audio: {\n list: Record<string, HMSPlaylistItem<T>>;\n selection: HMSPlaylistSelection;\n progress: number;\n volume: number;\n currentTime: number;\n };\n video: {\n list: Record<string, HMSPlaylistItem<T>>;\n selection: HMSPlaylistSelection;\n progress: number;\n volume: number;\n currentTime: number;\n };\n}\n\nexport interface IHMSPlaylistActions {\n /**\n * Pass the id of the item to be played\n * @param {string} id - id of playlist item\n */\n play(id: string): Promise<void>;\n /**\n * Pauses current playing item\n */\n pause(): Promise<void>;\n /**\n * PlayNext\n */\n playNext(): Promise<void>;\n /**\n * PlayPrevious\n */\n playPrevious(): Promise<void>;\n /**\n * seek passing seekValue - this is relative to current position\n * @param {number} seekValue - number in seconds to move forwards(pass negative values to move backwards)\n */\n seek(seekValue: number): void;\n /**\n * seek passing seekValue - seekValue will be absolute\n * @param {number} seekValue - value in seconds of absolute position in the playlist item duration\n */\n seekTo(seekValue: number): void;\n /**\n * set volume passing volume\n * @param {number} volume - number between 0-100\n */\n setVolume(volume: number): void;\n /**\n * pass list to set playlist\n * @param {HMSPlaylistItem[]} - list of playlist items\n */\n setList<T>(list: HMSPlaylistItem<T>[]): void;\n /**\n * Stop the current playback and remove the tracks\n */\n stop(): Promise<void>;\n}\n\nexport interface HMSPlaylistSelector {\n list: <T>(store: HMSStore) => HMSPlaylistItem<T>[];\n /**\n * This returns playlist selection with id, hasNext, hasPrev\n * @returns {HMSPlaylistSelection}\n */\n selection: (store: HMSStore) => HMSPlaylistSelection;\n /**\n * This returns playlist item for corresponding Id in selection\n * @returns {HMSPlaylistItem}\n */\n selectedItem: <T>(store: HMSStore) => HMSPlaylistItem<T>;\n progress: (store: HMSStore) => number;\n volume: (store: HMSStore) => number;\n currentTime: (store: HMSStore) => number;\n}\n","import { HMSPeer, HMSPeerID, HMSTrack, HMSTrackID } from '../../schema';\nimport { HMSTrack as SDKHMSTrack } from '@100mslive/hms-video';\n\n/**\n * updates draftPeers with newPeers ensuring minimal reference changes\n * @remarks\n * This is mutable and impure function, it modifies the passed in data to ensure\n * minimal reference changes\n * @param draftPeers the current peers object in store, an immer draft object\n * @param newPeers the latest update which needs to be stored\n * @param newHmsTracks this will be update if required\n * @param newHmsSDkTracks this is future value of local hms tacks map\n */\nexport const mergeNewPeersInDraft = (\n draftPeers: Record<HMSPeerID, HMSPeer>,\n newPeers: Record<HMSPeerID, Partial<HMSPeer>>,\n newHmsTracks: Record<HMSTrackID, Partial<HMSTrack>>,\n newHmsSDkTracks: Record<HMSTrackID, SDKHMSTrack>,\n) => {\n const peerIDs = union(Object.keys(draftPeers), Object.keys(newPeers));\n for (let peerID of peerIDs) {\n const oldPeer = draftPeers[peerID];\n const newPeer = newPeers[peerID];\n if (isEntityUpdated(oldPeer, newPeer)) {\n if (areArraysEqual(oldPeer.auxiliaryTracks, newPeer.auxiliaryTracks)) {\n newPeer.auxiliaryTracks = oldPeer.auxiliaryTracks;\n }\n handleLocalVideoReplaceTrack(oldPeer, newPeer, newHmsTracks, newHmsSDkTracks);\n Object.assign(oldPeer, newPeer);\n } else if (isEntityRemoved(oldPeer, newPeer)) {\n delete draftPeers[peerID];\n } else if (isEntityAdded(oldPeer, newPeer)) {\n draftPeers[peerID] = newPeer as HMSPeer;\n }\n }\n};\n\nexport const mergeNewTracksInDraft = (\n draftTracks: Record<HMSTrackID, HMSTrack>,\n newTracks: Record<HMSTrackID, Partial<HMSTrack>>,\n) => {\n const trackIDs = union(Object.keys(draftTracks), Object.keys(newTracks));\n for (let trackID of trackIDs) {\n const oldTrack = draftTracks[trackID];\n const newTrack = newTracks[trackID];\n if (isEntityUpdated(oldTrack, newTrack)) {\n mergeTrackArrayFields(oldTrack, newTrack);\n Object.assign(oldTrack, newTrack);\n } else if (isEntityRemoved(oldTrack, newTrack)) {\n delete draftTracks[trackID];\n } else if (isEntityAdded(oldTrack, newTrack)) {\n draftTracks[trackID] = newTrack as HMSTrack;\n }\n }\n};\n\n/**\n * array's are usually created with new reference, avoid that update if both arrays are same\n */\nconst mergeTrackArrayFields = (oldTrack: HMSTrack, newTrack: Partial<HMSTrack>) => {\n if (oldTrack.plugins && areArraysEqual(oldTrack.plugins, newTrack.plugins)) {\n newTrack.plugins = oldTrack.plugins;\n }\n if (\n oldTrack.layerDefinitions &&\n areArraysEqual(oldTrack.layerDefinitions, newTrack.layerDefinitions)\n ) {\n newTrack.layerDefinitions = oldTrack.layerDefinitions;\n }\n};\n\nconst isEntityUpdated = <T>(oldItem: T, newItem: T) => oldItem && newItem;\nconst isEntityRemoved = <T>(oldItem: T, newItem: T) => oldItem && !newItem;\nconst isEntityAdded = <T>(oldItem: T, newItem: T) => !oldItem && newItem;\n\n// eslint-disable-next-line complexity\nexport const areArraysEqual = <T>(arr1: T[], arr2?: T[]): boolean => {\n if (arr1 === arr2 || (arr1.length === 0 && arr2?.length === 0)) {\n // reference check\n return true;\n }\n if (!arr1 || !arr2 || !(arr1.length === arr2.length)) {\n return false;\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n};\n\nconst union = <T>(arr1: T[], arr2: T[]): T[] => {\n const set: Set<T> = new Set();\n for (let elem of arr1) {\n set.add(elem);\n }\n for (let elem of arr2) {\n set.add(elem);\n }\n return Array.from(set);\n};\n\n/**\n * on replace track, use prev video track id in peer object, this is because we\n * don't want the peer or peers object reference to change, the fact that the video\n * track is changed on mute/unmute because of replace track is abstracted\n */\nfunction handleLocalVideoReplaceTrack(\n oldPeer: HMSPeer,\n newPeer: Partial<HMSPeer>,\n newHmsTracks: Record<HMSTrackID, Partial<HMSTrack>>,\n newHmsSDkTracks: Record<HMSTrackID, SDKHMSTrack>,\n) {\n if (\n oldPeer.isLocal &&\n oldPeer.videoTrack &&\n newPeer.videoTrack &&\n oldPeer.videoTrack !== newPeer.videoTrack\n ) {\n newHmsSDkTracks[oldPeer.videoTrack] = newHmsSDkTracks[newPeer.videoTrack];\n delete newHmsSDkTracks[newPeer.videoTrack];\n newHmsTracks[oldPeer.videoTrack] = newHmsTracks[newPeer.videoTrack];\n newHmsTracks[oldPeer.videoTrack].id = oldPeer.videoTrack;\n delete newHmsTracks[newPeer.videoTrack];\n newPeer.videoTrack = oldPeer.videoTrack;\n }\n}\n","import {\n HMSLocalAudioTrack as SDKHMSLocalAudioTrack,\n HMSLocalVideoTrack as SDKHMSLocalVideoTrack,\n HMSRemoteAudioTrack as SDKHMSRemoteAudioTrack,\n HMSRemoteVideoTrack as SDKHMSRemoteVideoTrack,\n HMSRoleChangeRequest as SDKHMSRoleChangeRequest,\n HMSTrack as SDKHMSTrack,\n} from '@100mslive/hms-video';\nimport {\n HMSDeviceChangeEvent,\n HMSException,\n HMSMessage,\n HMSPeer,\n HMSPeerID,\n HMSPlaylistItem,\n HMSPlaylistType,\n HMSRole,\n HMSRoleChangeStoreRequest,\n HMSRoleName,\n HMSRoom,\n HMSTrack,\n} from '../schema';\n\nimport * as sdkTypes from './sdkTypes';\nimport { areArraysEqual } from './sdkUtils/storeMergeUtils';\n\nexport class SDKToHMS {\n static convertPeer(sdkPeer: sdkTypes.HMSPeer): Partial<HMSPeer> & Pick<HMSPeer, 'id'> {\n return {\n id: sdkPeer.peerId,\n name: sdkPeer.name,\n roleName: sdkPeer.role?.name,\n isLocal: sdkPeer.isLocal,\n videoTrack: sdkPeer.videoTrack?.trackId,\n audioTrack: sdkPeer.audioTrack?.trackId,\n auxiliaryTracks: sdkPeer.auxiliaryTracks.map(t => t.trackId),\n customerUserId: sdkPeer.customerUserId,\n customerDescription: sdkPeer.customerDescription,\n };\n }\n\n static convertTrack(sdkTrack: SDKHMSTrack, peerId?: HMSPeerID): HMSTrack {\n const track: HMSTrack = {\n id: sdkTrack.trackId,\n source: sdkTrack.source,\n type: sdkTrack.type,\n enabled: sdkTrack.enabled,\n displayEnabled: sdkTrack.enabled,\n peerId: sdkTrack.peerId || peerId,\n };\n this.enrichTrack(track, sdkTrack);\n return track;\n }\n\n static enrichTrack(track: HMSTrack, sdkTrack: SDKHMSTrack) {\n const mediaSettings = sdkTrack.getMediaTrackSettings();\n if (track.source === 'screen' && track.type === 'video') {\n // @ts-ignore\n track.displaySurface = mediaSettings.displaySurface;\n }\n track.height = mediaSettings.height;\n track.width = mediaSettings.width;\n track.deviceID = mediaSettings.deviceId;\n if (sdkTrack instanceof SDKHMSRemoteAudioTrack) {\n track.volume = sdkTrack.getVolume() || 0;\n }\n SDKToHMS.enrichVideoTrack(track, sdkTrack);\n SDKToHMS.enrichPluginsDetails(track, sdkTrack);\n }\n\n static enrichVideoTrack(track: HMSTrack, sdkTrack: SDKHMSTrack) {\n if (sdkTrack instanceof SDKHMSRemoteVideoTrack) {\n track.layer = sdkTrack.getSimulcastLayer();\n track.degraded = sdkTrack.degraded;\n if (!areArraysEqual(sdkTrack.getSimulcastDefinitions(), track.layerDefinitions)) {\n track.layerDefinitions = sdkTrack.getSimulcastDefinitions();\n }\n }\n }\n\n static enrichPluginsDetails(track: HMSTrack, sdkTrack: SDKHMSTrack) {\n if (sdkTrack instanceof SDKHMSLocalVideoTrack || sdkTrack instanceof SDKHMSLocalAudioTrack) {\n if (!areArraysEqual(sdkTrack.getPlugins(), track.plugins)) {\n track.plugins = sdkTrack.getPlugins();\n }\n }\n }\n\n static convertRoom(sdkRoom: sdkTypes.HMSRoom): Partial<HMSRoom> {\n return {\n id: sdkRoom.id,\n name: sdkRoom.name,\n localPeer: sdkRoom.localPeer?.peerId ?? '',\n hasWaitingRoom: sdkRoom.hasWaitingRoom,\n shareableLink: sdkRoom.shareableLink,\n recording: {\n browser: {\n running: !!sdkRoom.recording?.browser.running,\n },\n server: { running: !!sdkRoom.recording?.server.running },\n },\n rtmp: { running: !!sdkRoom.rtmp?.running },\n };\n }\n\n static convertMessage(\n sdkMessage: sdkTypes.HMSMessage,\n ): Partial<HMSMessage> & Pick<HMSMessage, 'sender'> {\n return {\n sender: sdkMessage.sender.peerId,\n senderName: sdkMessage.sender.name,\n senderRole: sdkMessage.sender.role?.name,\n senderUserId: sdkMessage.sender.customerUserId,\n recipientPeer: sdkMessage.recipientPeer?.peerId,\n recipientRoles: sdkMessage.recipientRoles?.map(role => role.name),\n time: sdkMessage.time,\n type: sdkMessage.type,\n message: sdkMessage.message,\n };\n }\n\n static convertRoles(sdkRoles: HMSRole[]): Record<HMSRoleName, HMSRole> {\n const roles: Record<HMSRoleName, HMSRole> = {};\n if (sdkRoles) {\n sdkRoles.forEach(role => {\n roles[role.name] = role;\n });\n }\n return roles;\n }\n\n static convertRoleChangeRequest(req: SDKHMSRoleChangeRequest): HMSRoleChangeStoreRequest {\n return {\n requestedBy: req.requestedBy.peerId,\n roleName: req.role.name,\n token: req.token,\n };\n }\n\n static convertException(sdkException: sdkTypes.HMSException): HMSException {\n return {\n code: sdkException.code,\n action: sdkException.action,\n name: sdkException.name,\n message: sdkException.message,\n description: sdkException.description,\n isTerminal: sdkException.isTerminal,\n nativeError: sdkException.nativeError,\n timestamp: new Date(),\n };\n }\n\n static convertDeviceChangeUpdate(\n sdkDeviceChangeEvent: sdkTypes.HMSDeviceChangeEvent,\n ): HMSDeviceChangeEvent {\n const convertedData: HMSDeviceChangeEvent = {\n devices: sdkDeviceChangeEvent.devices,\n selection: sdkDeviceChangeEvent.selection,\n type: sdkDeviceChangeEvent.type,\n };\n if (sdkDeviceChangeEvent.error) {\n convertedData.error = this.convertException(sdkDeviceChangeEvent.error);\n }\n return convertedData;\n }\n\n static convertPlaylist(playlistManager: sdkTypes.HMSPlaylistManager) {\n const audioPlaylist = this.getConvertedPlaylistType(playlistManager, HMSPlaylistType.audio);\n const videoPlaylist = this.getConvertedPlaylistType(playlistManager, HMSPlaylistType.video);\n return { audio: audioPlaylist, video: videoPlaylist };\n }\n\n private static getConvertedPlaylistType(\n playlistManager: sdkTypes.HMSPlaylistManager,\n type: HMSPlaylistType,\n ) {\n const convertedPlaylist: Record<string, HMSPlaylistItem<any>> = {};\n const currentSelection = playlistManager.getCurrentSelection(type);\n const progress = playlistManager.getCurrentProgress(type);\n const isPlaying = playlistManager.isPlaying(type);\n const volume = playlistManager.getVolume(type);\n const list = playlistManager.getList(type);\n const currentIndex = playlistManager.getCurrentIndex(type);\n\n playlistManager.getList(type).forEach(playlistItem => {\n const isSelected = playlistItem.url === currentSelection?.url;\n convertedPlaylist[playlistItem.id] = {\n ...playlistItem,\n type: playlistItem.type as HMSPlaylistType,\n selected: isSelected,\n playing: isSelected && isPlaying,\n };\n });\n return {\n list: convertedPlaylist,\n selection: {\n id: currentSelection?.id,\n hasPrevious: currentIndex > 0,\n hasNext: currentIndex < list.length - 1,\n },\n progress,\n volume,\n currentTime: playlistManager.getCurrentTime(type),\n };\n }\n\n static convertRecordingRTMPState(\n recording: sdkTypes.HMSRecording | undefined,\n rtmp: sdkTypes.HMSRTMP | undefined,\n ): { recording: sdkTypes.HMSRecording; rtmp: sdkTypes.HMSRTMP } {\n return {\n recording: {\n browser: {\n running: !!recording?.browser?.running,\n },\n server: { running: !!recording?.server?.running },\n },\n rtmp: { running: !!rtmp?.running },\n };\n }\n}\n","import { HMSPeer, HMSStore, HMSTrack, HMSTrackID } from '../schema';\n\ntype trackCheck = (track: HMSTrack | undefined) => boolean | undefined;\n\nexport function getPeerTracksByCondition(\n tracks: Record<HMSTrackID, HMSTrack>,\n peer: HMSPeer | null,\n trackCheckFn: trackCheck = isScreenShare,\n) {\n let videoTrack = undefined;\n let audioTrack = undefined;\n if (peer) {\n for (let trackID of peer.auxiliaryTracks) {\n const track = tracks[trackID];\n if (trackCheckFn(track)) {\n audioTrack = isAudio(track) ? track : audioTrack;\n videoTrack = isVideo(track) ? track : videoTrack;\n }\n }\n }\n return { video: videoTrack, audio: audioTrack };\n}\n\nexport function isAudio(track: HMSTrack | undefined) {\n return track && track.type === 'audio';\n}\n\nexport function isVideo(track: HMSTrack | undefined) {\n return track && track.type === 'video';\n}\n\nexport function isScreenShare(track: HMSTrack | undefined) {\n return track && track.source === 'screen';\n}\n\nexport function isAudioPlaylist(track: HMSTrack | undefined) {\n return track && track.source === 'audioplaylist';\n}\n\nexport function isVideoPlaylist(track: HMSTrack | undefined) {\n return track && track.source === 'videoplaylist';\n}\n\nexport function isDegraded(track: HMSTrack | undefined) {\n return Boolean(track?.degraded);\n}\n\nexport function isTrackEnabled(store: HMSStore, trackID?: string) {\n if (trackID && store.tracks[trackID]) {\n return store.tracks[trackID].enabled;\n }\n return false;\n}\n\n/**\n * Should UI show the video track as enabled\n */\nexport function isTrackDisplayEnabled(store: HMSStore, trackID?: string) {\n if (trackID && store.tracks[trackID]) {\n return store.tracks[trackID].displayEnabled;\n }\n return false;\n}\n","import { HMSMessage, HMSPeer, HMSPeerID, HMSRoom, HMSRoomState, HMSStore } from '../schema';\nimport { createSelector } from 'reselect';\n// noinspection ES6PreferShortImport\nimport { HMSRole } from '../hmsSDKStore/sdkTypes';\nimport {\n getPeerTracksByCondition,\n isDegraded,\n isVideoPlaylist,\n isTrackDisplayEnabled,\n isTrackEnabled,\n} from './selectorUtils';\n\n/**\n * Select the current {@link HMSRoom} object to which you are connected.\n * @param store\n */\nexport const selectRoom = (store: HMSStore): HMSRoom => store.room;\n\n/**\n * @internal\n */\nexport const selectPeersMap = (store: HMSStore): Record<HMSPeerID, HMSPeer> => store.peers;\n\n/**\n * @internal\n */\nexport const selectMessagesMap = (store: HMSStore) => store.messages.byID;\n\n/**\n * Select IDs of messages you've sent or received sorted chronologically.\n */\nexport const selectMessageIDsInOrder = (store: HMSStore) => store.messages.allIDs;\n\n/**\n * @internal\n */\nexport const selectTracksMap = (store: HMSStore) => store.tracks;\n\n/**\n * Select your media settings\n * i.e., choosen audio input device, audio output device and video input device.\n * @param store\n */\nexport const selectLocalMediaSettings = (store: HMSStore) => store.settings;\n\n/**\n * Select the available audio input, audio output and video input devices on your machine.\n * @param store\n * @returns An object of array of available audio input, audio output and video input devices.\n * ```\n * type DeviceMap = {\n * audioInput: InputDeviceInfo[];\n * audioOutput: MediaDeviceInfo[];\n * videoInput: InputDeviceInfo[];\n * }\n * ```\n */\nexport const selectDevices = (store: HMSStore) => {\n return store.devices;\n};\n\nexport const selectSpeakers = (store: HMSStore) => {\n return store.speakers;\n};\n\n/**\n * Select a boolean flag denoting whether you've joined a room.\n * NOTE: Returns true only after join, returns false during preview.\n */\nexport const selectIsConnectedToRoom = createSelector(\n [selectRoom],\n room => room && room.isConnected,\n);\n\nexport const selectPeerCount = createSelector(selectRoom, room => room.peers.length);\n\n/**\n * Select an array of peers(remote peers and your local peer) present in the room.\n */\nexport const selectPeers = createSelector([selectRoom, selectPeersMap], (room, storePeers) => {\n return room.peers.map(peerID => storePeers[peerID]);\n});\n\n/**\n * Select an array of tracks(remote peer tracks and your local tracks) present in the room.\n */\nconst selectTracks = createSelector(selectTracksMap, storeTracks => {\n return Object.values(storeTracks);\n});\n\n/**\n * Select the local peer object object assigned to you.\n */\nexport const selectLocalPeer = createSelector(selectRoom, selectPeersMap, (room, peers) => {\n return peers[room.localPeer];\n});\n\n/**\n * Select the peer ID of your local peer.\n */\nexport const selectLocalPeerID = createSelector(selectRoom, room => {\n return room.localPeer;\n});\n\n/**\n * Select the track ID of your local peer's primary audio track\n */\nexport const selectLocalAudioTrackID = createSelector(selectLocalPeer, peer => peer?.audioTrack);\n\n/**\n * Select the track ID of your local peer's primary video track\n */\nexport const selectLocalVideoTrackID = createSelector(selectLocalPeer, peer => peer?.videoTrack);\n\n/**\n * Select an array of track IDs of your local peer's auxiliary tracks\n */\nconst selectLocalAuxiliaryTrackIDs = createSelector(selectLocalPeer, peer => peer?.auxiliaryTracks);\n\n/**\n * Select an array of track IDs of all your local peer's tracks\n */\nexport const selectLocalTrackIDs = createSelector(\n [selectLocalAudioTrackID, selectLocalVideoTrackID, selectLocalAuxiliaryTrackIDs],\n (audioTrackID, videoTrackID, auxiliaryTrackIDs) => {\n const trackIDs: string[] = [...auxiliaryTrackIDs];\n audioTrackID && trackIDs.unshift(audioTrackID);\n videoTrackID && trackIDs.unshift(videoTrackID);\n return trackIDs;\n },\n);\n\n/**\n * Select remote peers(other users you're connected with via the internet) present in the room.\n */\nexport const selectRemotePeers = createSelector(selectPeers, peers => {\n return peers.filter(p => !p.isLocal);\n});\n\n/**\n * Select the peer who's speaking the loudest at the moment\n */\nexport const selectDominantSpeaker = createSelector(\n selectPeersMap,\n selectSpeakers,\n (peersMap, speakers) => {\n // sort in descending order by audio level\n const speakersInOrder = Object.entries(speakers).sort((s1, s2) => {\n const s1Level = s1[1]?.audioLevel || 0;\n const s2Level = s2[1]?.audioLevel || 0;\n return s2Level > s1Level ? 1 : -1;\n });\n if (\n speakersInOrder.length > 0 &&\n speakersInOrder[0][1].audioLevel &&\n speakersInOrder[0][1].audioLevel > 0\n ) {\n const peerID = speakersInOrder[0][1].peerID;\n if (peerID in peersMap) {\n return peersMap[peerID];\n }\n }\n return null;\n },\n);\n\n/**\n * Select a boolean denoting whether your local audio is unmuted\n * and the audio from your microphone is shared to remote peers\n */\nexport const selectIsLocalAudioEnabled = (store: HMSStore) => {\n const localPeer = selectLocalPeer(store);\n return isTrackEnabled(store, localPeer?.audioTrack);\n};\n\n/**\n * Select a boolean denoting whether your local video is unmuted\n * and the video from your camera is shared to remote peers\n */\nexport const selectIsLocalVideoEnabled = (store: HMSStore) => {\n const localPeer = selectLocalPeer(store);\n return isTrackEnabled(store, localPeer?.videoTrack);\n};\n\n/**\n * Select a boolean denoting whether you've chosen to unmute and share your local video.\n *\n * NOTE: Once you call `hmsActions.setLocalVideoEnabled(true)`to unmute your local video,\n * it takes some time to fetch your video from your video source.\n * This displayEnabled property gives immediate feedback for a more interactive UI,\n * without waiting for the video source\n */\nexport const selectIsLocalVideoDisplayEnabled = (store: HMSStore) => {\n const localPeer = selectLocalPeer(store);\n return isTrackDisplayEnabled(store, localPeer?.videoTrack);\n};\n\n/**\n * Select a boolean denoting whether your screen is shared to remote peers in the room.\n */\nexport const selectIsLocalScreenShared = createSelector(\n selectLocalPeer,\n selectTracksMap,\n (localPeer, tracksMap) => {\n const { video, audio } = getPeerTracksByCondition(tracksMap, localPeer);\n return !!(video || audio);\n },\n);\n\n/**\n * Select the first peer who is currently sharing their screen.\n */\nexport const selectPeerScreenSharing = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n let screensharePeer = undefined;\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { video, audio } = getPeerTracksByCondition(tracksMap, peer);\n if (video) {\n return peer;\n } else if (audio && !screensharePeer) {\n screensharePeer = peer;\n }\n }\n return screensharePeer;\n },\n);\n\n/**\n * Select a boolean denoting whether someone is sharing screen in the room.\n */\nexport const selectIsSomeoneScreenSharing = createSelector(selectPeerScreenSharing, peer => {\n return !!peer;\n});\n\n/**\n * Select the first peer who is currently sharing their audio only screen\n */\nexport const selectPeerSharingAudio = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { audio, video } = getPeerTracksByCondition(tracksMap, peer);\n if (!video && !!audio) {\n return peer;\n }\n }\n return undefined;\n },\n);\n\n/**\n * Select an array of peers who are currently sharing their screen.\n */\nexport const selectPeersScreenSharing = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n const videoPeers = [];\n const audioPeers = [];\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { video, audio } = getPeerTracksByCondition(tracksMap, peer);\n if (video) {\n videoPeers.push(peer);\n } else if (audio) {\n audioPeers.push(peer);\n }\n }\n return videoPeers.concat(audioPeers);\n },\n);\n\nexport const selectPeerSharingVideoPlaylist = createSelector(\n selectPeersMap,\n selectTracksMap,\n (peersMap, tracksMap) => {\n for (const peerID in peersMap) {\n const peer = peersMap[peerID];\n const { video } = getPeerTracksByCondition(tracksMap, peer, isVideoPlaylist);\n if (video) {\n return peer;\n }\n }\n return undefined;\n },\n);\n\n/**\n * Select an array of tracks that have been degraded(receiving lower video quality/no video) due to bad network locally.\n */\nexport const selectDegradedTracks = createSelector(selectTracks, tracks =>\n tracks.filter(isDegraded),\n);\n\n/**\n * Select the number of messages(sent and received).\n */\nexport const selectHMSMessagesCount = createSelector(\n selectMessageIDsInOrder,\n messageIDs => messageIDs.length,\n);\n\n/**\n * Select the number of unread messages.\n */\nexport const selectUnreadHMSMessagesCount = createSelector(selectMessagesMap, messages => {\n return Object.values(messages).filter(m => !m.read).length;\n});\n\n/**\n * Select an array of messages in the room(sent and received).\n */\nexport const selectHMSMessages = createSelector(\n selectMessageIDsInOrder,\n selectMessagesMap,\n (msgIDs, msgMap) => {\n const messages: HMSMessage[] = [];\n msgIDs.forEach(msgId => {\n messages.push(msgMap[msgId]);\n });\n return messages;\n },\n);\n\n/**\n * Select the current state of the room.\n */\nexport const selectRoomState = createSelector([selectRoom], room => room && room.roomState);\n\n/**\n * Select a boolean denoting whether the room is in Preview state.\n */\nexport const selectIsInPreview = createSelector(\n selectRoomState,\n roomState => roomState === HMSRoomState.Preview,\n);\n\nexport const selectRoomStarted = createSelector(\n selectRoom,\n room => room.roomState !== HMSRoomState.Disconnected,\n);\n\n/**\n * Select available roles in the room as a map between the role name and {@link HMSRole} object.\n */\nexport const selectRolesMap = (store: HMSStore): Record<string, HMSRole> => {\n return store.roles;\n};\n\n/**\n * Select an array of names of available roles in the room.\n */\nexport const selectAvailableRoleNames = createSelector([selectRolesMap], rolesMap =>\n Object.keys(rolesMap),\n);\n\n/**\n * Select the {@link HMSRole} object of your local peer.\n */\nexport const selectLocalPeerRole = createSelector(\n [selectLocalPeer, selectRolesMap],\n (localPeer, rolesMap) => (localPeer?.roleName ? rolesMap[localPeer.roleName] : null),\n);\n\n/**\n * Select a boolean denoting whether if your local peer is allowed to subscribe to any other role.\n */\nexport const selectIsAllowedToSubscribe = createSelector([selectLocalPeerRole], (role): boolean => {\n if (!role?.subscribeParams?.subscribeToRoles) {\n return false;\n }\n return role.subscribeParams.subscribeToRoles.length > 0;\n});\n\n/**\n * Select the permissions which determine what actions the local peer can do.\n */\nexport const selectPermissions = createSelector(selectLocalPeerRole, role => role?.permissions);\nexport const selectRecordingState = createSelector(selectRoom, room => room.recording);\nexport const selectRTMPState = createSelector(selectRoom, room => room.rtmp);\n","import { createSelector } from 'reselect';\nimport { HMSPlaylistType, HMSStore, HMSPlaylistSelector } from '../schema';\n\n/**\n * @internal\n */\nconst selectPlaylistMap = (type: HMSPlaylistType = HMSPlaylistType.audio) => (store: HMSStore) =>\n store.playlist[type].list;\n\nconst selectPlaylistSelection = (type: HMSPlaylistType = HMSPlaylistType.audio) => (\n store: HMSStore,\n) => store.playlist[type].selection;\n\nconst selectPlaylistProgress = (type: HMSPlaylistType = HMSPlaylistType.audio) => (\n store: HMSStore,\n) => store.playlist[type].progress;\n\nconst selectPlaylistCurrentTime = (type: HMSPlaylistType = HMSPlaylistType.audio) => (\n store: HMSStore,\n) => store.playlist[type].currentTime;\n\nconst selectPlaylistVolume = (type: HMSPlaylistType = HMSPlaylistType.audio) => (store: HMSStore) =>\n store.playlist[type].volume;\n\n/**\n * Select an array of playlist items.\n */\nconst selectPlaylist = (type: HMSPlaylistType = HMSPlaylistType.audio) =>\n createSelector(selectPlaylistMap(type), storePlaylist => {\n return Object.values(storePlaylist);\n });\n\nconst selectPlaylistSelectedItem = (type: HMSPlaylistType = HMSPlaylistType.audio) =>\n createSelector(\n selectPlaylistMap(type),\n selectPlaylistSelection(type),\n (storePlaylist, currentSelection) => {\n if (!currentSelection.id) {\n return;\n }\n return storePlaylist[currentSelection.id];\n },\n );\n\nexport const selectAudioPlaylist: HMSPlaylistSelector = {\n selection: selectPlaylistSelection(HMSPlaylistType.audio),\n progress: selectPlaylistProgress(HMSPlaylistType.audio),\n currentTime: selectPlaylistCurrentTime(HMSPlaylistType.audio),\n volume: selectPlaylistVolume(HMSPlaylistType.audio),\n list: selectPlaylist(HMSPlaylistType.audio),\n selectedItem: <any>selectPlaylistSelectedItem(HMSPlaylistType.audio),\n};\n\nexport const selectVideoPlaylist: HMSPlaylistSelector = {\n selection: selectPlaylistSelection(HMSPlaylistType.video),\n progress: selectPlaylistProgress(HMSPlaylistType.video),\n currentTime: selectPlaylistCurrentTime(HMSPlaylistType.audio),\n volume: selectPlaylistVolume(HMSPlaylistType.video),\n list: selectPlaylist(HMSPlaylistType.video),\n selectedItem: <any>selectPlaylistSelectedItem(HMSPlaylistType.video),\n};\n","import { HMSLogLevel } from '../core/hmsSDKStore/sdkTypes';\n\nconst HMS_STORE_TAG = 'HMS-Store:';\n\nexport class HMSLogger {\n static level: HMSLogLevel = HMSLogLevel.VERBOSE;\n\n static v(tag: string, ...data: any[]) {\n this.log(HMSLogLevel.VERBOSE, tag, ...data);\n }\n\n static d(...data: any[]) {\n this.log(HMSLogLevel.DEBUG, ...data);\n }\n\n static i(...data: any[]) {\n this.log(HMSLogLevel.INFO, ...data);\n }\n\n static w(...data: any[]) {\n this.log(HMSLogLevel.WARN, ...data);\n }\n\n static e(...data: any[]) {\n this.log(HMSLogLevel.ERROR, ...data);\n }\n\n static time(mark: string) {\n this.log(HMSLogLevel.TIME, '[HMSPerformanceTiming]', mark);\n }\n\n static timeEnd(mark: string) {\n this.log(HMSLogLevel.TIMEEND, '[HMSPerformanceTiming]', mark, mark);\n }\n\n static cleanUp() {\n performance.clearMarks();\n performance.clearMeasures();\n }\n\n /* eslint-disable */\n private static log(level: HMSLogLevel, ...data: any[]) {\n if (this.level.valueOf() > level.valueOf()) {\n return;\n }\n\n switch (level) {\n case HMSLogLevel.VERBOSE: {\n console.log(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.DEBUG: {\n console.debug(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.INFO: {\n console.info(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.WARN: {\n console.warn(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.ERROR: {\n console.error(HMS_STORE_TAG, ...data);\n break;\n }\n case HMSLogLevel.TIME: {\n performance.mark(data[1]);\n break;\n }\n case HMSLogLevel.TIMEEND: {\n const tag = data[0];\n const mark = data[1];\n try {\n const entry = performance.measure(mark, mark);\n //@ts-ignore\n this.log(HMSLogLevel.DEBUG, tag, mark, entry?.duration);\n performance.clearMarks(mark);\n performance.clearMeasures(mark);\n } catch (error) {\n this.log(HMSLogLevel.DEBUG, tag, mark, error);\n }\n break;\n }\n }\n }\n}\n","import { createSelector } from 'reselect';\nimport { selectHMSMessages, selectLocalPeerID, selectPeersMap, selectTracksMap } from './selectors';\nimport { HMSPeerID, HMSRoleName, HMSStore, HMSTrack, HMSTrackID } from '../schema';\nimport {\n getPeerTracksByCondition,\n isAudio,\n isVideoPlaylist,\n isTrackEnabled,\n isVideo,\n isAudioPlaylist,\n} from './selectorUtils';\nimport { HMSLogger } from '../../common/ui-logger';\n\ntype byIDSelector<T> = (store: HMSStore, id?: string) => T;\n\n/**\n * StoreSelector is a function that takes in {@link HMSStore} as argument\n * and returns a part of the store that is queried using the selector.\n * @typeParam T Part of the store that you wish to query.\n */\ntype StoreSelector<T> = (store: HMSStore) => T;\n\n/**\n * takes in a normal selector which has store and id as input and curries it to make it easier to use.\n * Before: store.getState((store) => normalSelector(store, peerID))\n * After: store.getState(curriedSelector(peerID))\n */\nfunction byIDCurry<T>(selector: byIDSelector<T>): (id?: string) => StoreSelector<T> {\n return (id?: string) => {\n return (store: HMSStore) => selector(store, id);\n };\n}\n\nconst selectPeerID = (_store: HMSStore, peerID: HMSPeerID | undefined) => peerID;\nconst selectTrackID = (_store: HMSStore, trackID: HMSTrackID | undefined) => trackID;\nconst selectRoleName = (_store: HMSStore, roleName: HMSRoleName | undefined) => roleName;\n\nconst selectPeerByIDBare = createSelector([selectPeersMap, selectPeerID], (storePeers, peerID) =>\n peerID ? storePeers[peerID] : null,\n);\n\nconst selectTrackByIDBare = createSelector(\n [selectTracksMap, selectTrackID],\n (storeTracks, trackID) => (trackID ? storeTracks[trackID] : null),\n);\n\n/**\n * Select the {@link HMSPeer} object given a peer ID.\n */\nexport const selectPeerByID = byIDCurry(selectPeerByIDBare);\n\n/**\n * Select the name of a {@link HMSPeer} given a peer ID.\n */\nexport const selectPeerNameByID = byIDCurry(createSelector(selectPeerByIDBare, peer => peer?.name));\n\n/**\n * Select the {@link HMSTrack} object given a track ID.\n */\nexport const selectTrackByID = byIDCurry(selectTrackByIDBare);\n\n/**\n * Select the primary video track of a peer given a peer ID.\n */\nexport const selectVideoTrackByPeerID = byIDCurry((store: HMSStore, peerID?: HMSPeerID):\n | HMSTrack\n | undefined => {\n const peer = selectPeerByIDBare(store, peerID);\n if (peer && peer.videoTrack && peer.videoTrack !== '') {\n return store.tracks[peer.videoTrack];\n }\n return undefined;\n});\n\n/**\n * Select the primary audio track of a peer given a peer ID.\n */\nexport const selectAudioTrackByPeerID = byIDCurry((store: HMSStore, peerID?: HMSPeerID):\n | HMSTrack\n | undefined => {\n const peer = selectPeerByIDBare(store, peerID);\n if (peer && peer.audioTrack && peer.audioTrack !== '') {\n return store.tracks[peer.audioTrack];\n }\n return undefined;\n});\n\n/**\n * Select the camera stream of a peer given a peer ID.\n * This is the primary video track of a peer.\n */\nexport const selectCameraStreamByPeerID = selectVideoTrackByPeerID;\n\n/**\n * Select an array of auxiliary tracks of a peer given a peer ID.\n */\nexport const selectAuxiliaryTracksByPeerID = byIDCurry(\n (store: HMSStore, peerID?: HMSPeerID): HMSTrack[] => {\n const peer = selectPeerByIDBare(store, peerID);\n return peer?.auxiliaryTracks.map(trackID => store.tracks[trackID]) || [];\n },\n);\n\nconst selectSpeakerByTrackID = (store: HMSStore, trackID: HMSTrackID | undefined) => {\n return trackID ? store.speakers[trackID] : null;\n};\n\n/**\n * Select the audio level of a track given a track ID.\n */\nexport const selectTrackAudioByID = byIDCurry(\n createSelector(selectSpeakerByTrackID, speaker => speaker?.audioLevel || 0),\n);\n\n/**\n * Select speaker object of audioTrack of a peer given a peer ID.\n */\nconst selectSpeakerByPeerID = (store: HMSStore, peerID: HMSPeerID | undefined) => {\n const peerAudioTrack = selectAudioTrackByPeerID(peerID)(store);\n return selectSpeakerByTrackID(store, peerAudioTrack?.id);\n};\n\n/**\n * Select audio level of audioTrack of a peer given a peer IDß.\n */\nexport const selectPeerAudioByID = byIDCurry(\n createSelector(selectSpeakerByPeerID, speaker => speaker?.audioLevel || 0),\n);\n\n/**\n * Select the first auxiliary audio track of a peer given a peer ID.\n */\nexport const selectAuxiliaryAudioByPeerID = byIDCurry((store: HMSStore, peerID?: HMSPeerID):\n | HMSTrack\n | undefined => {\n const peer = selectPeerByIDBare(store, peerID);\n if (peer) {\n const trackID = peer?.auxiliaryTracks.find(trackID => isAudio(store.tracks[trackID]));\n return trackID ? store.tracks[trackID] : undefined;\n }\n return undefined;\n});\n\nexport const selectVideoPlaylistVideoTrackByPeerID = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n const trackID = peer?.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return isVideoPlaylist(track) && isVideo(track);\n });\n return trackID ? tracks[trackID] : undefined;\n }),\n);\n\nexport const selectVideoPlaylistAudioTrackByPeerID = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n const trackID = peer?.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return isVideoPlaylist(track) && isAudio(track);\n });\n return trackID ? tracks[trackID] : undefined;\n }),\n);\n\nexport const selectAudioPlaylistTrackByPeerID = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n const trackID = peer?.auxiliaryTracks.find(trackID => {\n const track = tracks[trackID];\n return isAudioPlaylist(track) && isAudio(track);\n });\n return trackID ? tracks[trackID] : undefined;\n }),\n);\n\nexport const selectScreenSharesByPeerId = byIDCurry(\n createSelector(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {\n return getPeerTracksByCondition(tracks, peer);\n }),\n);\n\n/**\n * Select the screen share video track of a peer given a peer ID.\n */\nexport const selectScreenShareByPeerID = (id?: string) =>\n createSelector(selectScreenSharesByPeerId(id), screenshare => {\n return screenshare.video;\n });\n\n/**\n * Select the screen share audio track of a peer given a peer ID.\n */\nexport const selectScreenShareAudioByPeerID = (id?: string) =>\n createSelector(selectScreenSharesByPeerId(id), screenshare => {\n return screenshare.audio;\n });\n\n/**\n * Select a boolean denoting whether a peer has unmuted audio and sharing it to other peers.\n */\nexport const selectIsPeerAudioEnabled = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return isTrackEnabled(store, peer?.audioTrack);\n});\n\n/**\n * Select a boolean denoting whether a peer has unmuted video and sharing it to other peers.\n */\nexport const selectIsPeerVideoEnabled = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return isTrackEnabled(store, peer?.videoTrack);\n});\n\n/**\n * Select a boolean denoting whether you've muted an audio track locally(only for you) given a track ID.\n */\nexport const selectIsAudioLocallyMuted = byIDCurry((store: HMSStore, trackID?: string) => {\n if (trackID && store.tracks[trackID]) {\n return store.tracks[trackID].volume === 0;\n }\n return undefined;\n});\n\n/**\n * Select a boolean denoting whether you've muted the primary audio track of a peer locally(only for you) given a peer ID.\n */\nexport const selectIsLocallyMutedByPeerID = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return selectIsAudioLocallyMuted(peer?.audioTrack)(store);\n});\n\n/**\n * Select a boolean denoting whether you've muted the screen share audio track of a peer locally(only for you) given a peer ID.\n */\nexport const selectIsScreenShareLocallyMutedByPeerID = byIDCurry(\n (store: HMSStore, peerID?: string) => {\n const track = selectScreenShareAudioByPeerID(peerID)(store);\n return selectIsAudioLocallyMuted(track?.id)(store);\n },\n);\n\n/**\n * Select the local audio volume of an audio track given a track ID.\n *\n * NOTE: **Volume** of a track is different from **Audio Level** of a track,\n * - Audio Level measures the audio of a track and it comes from 100ms's servers.\n * - Volume is how loud you hear the audio of a track, this is controlled by you at the client side.\n */\nexport const selectAudioTrackVolume = byIDCurry((store: HMSStore, trackID?: string) => {\n const track = selectTrackByIDBare(store, trackID);\n if (track) {\n if (track.type !== 'audio') {\n HMSLogger.w('Please pass audio track here');\n return undefined;\n }\n return track.volume;\n }\n return undefined;\n});\n\n/**\n * Select the local audio volume of the primary audio track of a peer given a peer ID.\n */\nexport const selectAudioVolumeByPeerID = byIDCurry((store: HMSStore, peerID?: string) => {\n const peer = selectPeerByIDBare(store, peerID);\n return selectAudioTrackVolume(peer?.audioTrack)(store);\n});\n\n/**\n * Select the local audio volume of the screen share of a peer given a peer ID.\n */\nexport const selectScreenshareAudioVolumeByPeerID = byIDCurry(\n (store: HMSStore, peerID?: string) => {\n const track = selectScreenShareAudioByPeerID(peerID)(store);\n return selectAudioTrackVolume(track?.id)(store);\n },\n);\n\n/**\n * Select the current simulcast layer of a track given a track ID.\n */\nexport const selectSimulcastLayerByTrack = byIDCurry((store: HMSStore, trackID?: string) => {\n const track = selectTrackByIDBare(store, trackID);\n if (track) {\n if (track.type !== 'video') {\n HMSLogger.w('Please pass video track here');\n return undefined;\n }\n return track.layer;\n }\n return undefined;\n});\n\nconst selectMessagesByPeerIDInternal = createSelector(\n [selectHMSMessages, selectLocalPeerID, selectPeerID],\n (messages, localPeerID, peerID) => {\n if (!peerID) {\n return undefined;\n }\n return messages.filter(message => {\n // Broadcast message\n if (!message.recipientPeer && !message.recipientRoles?.length) {\n return false;\n }\n // if localPeer or peerID is not a sender remove this\n if (![localPeerID, peerID].includes(message.sender)) {\n return false;\n }\n // at this point we know the sender is one of local or passed in peer, check the recipient side\n return [localPeerID, peerID].includes(message.recipientPeer!);\n });\n },\n);\n\nconst selectMessagesByRoleInternal = createSelector(\n [selectHMSMessages, selectRoleName],\n (messages, roleName) => {\n if (!roleName) {\n return undefined;\n }\n return messages.filter(message => {\n // Not Role message - Broadcast message or Private Peer message\n if (!message.recipientRoles?.length) {\n return false;\n }\n return message.recipientRoles?.includes(roleName);\n });\n },\n);\n\nexport const selectBroadcastMessages = createSelector(selectHMSMessages, messages => {\n return messages.filter(message => {\n if (!message.recipientPeer && !message.recipientRoles?.length) {\n return true;\n }\n return false;\n });\n});\n\nconst selectUnreadMessageCountByRole = createSelector(\n [selectMessagesByRoleInternal, selectRoleName],\n messages => {\n if (!messages) {\n return 0;\n }\n return messages.filter(m => !m.read).length;\n },\n);\n\nconst selectUnreadMessageCountByPeerID = createSelector(\n [selectMessagesByPeerIDInternal, selectPeerID],\n messages => {\n if (!messages) {\n return 0;\n }\n return messages.filter(m => !m.read).length;\n },\n);\n\nexport const selectBroadcastMessagesUnreadCount = createSelector(\n selectBroadcastMessages,\n messages => {\n return messages.filter(m => !m.read).length;\n },\n);\n\nexport const selectMessagesByPeerID = byIDCurry(selectMessagesByPeerIDInternal);\n\nexport const selectMessagesByRole = byIDCurry(selectMessagesByRoleInternal);\n\nexport const selectMessagesUnreadCountByRole = byIDCurry(selectUnreadMessageCountByRole);\nexport const selectMessagesUnreadCountByPeerID = byIDCurry(selectUnreadMessageCountByPeerID);\n","import { HMSPeer, HMSStore } from '../schema';\nimport { selectLocalPeerRole, selectPeersMap, selectRolesMap, selectTracksMap } from './selectors';\nimport { createSelector } from 'reselect';\nimport { HMSRole } from '@100mslive/hms-video';\n\nexport interface HMSPeerWithMuteStatus {\n peer: HMSPeer;\n isAudioEnabled?: boolean;\n}\n\n/**\n * @privateRemarks\n * this is more friendly to UI format, the object in store has only peer id and role name instead of the full objects\n */\nexport interface HMSRoleChangeRequest {\n requestedBy: HMSPeer;\n role: HMSRole;\n token: string;\n}\n\nexport interface HMSPublishAllowed {\n video: boolean;\n audio: boolean;\n screen: boolean;\n}\n\nexport const selectPeersWithAudioStatus = createSelector(\n [selectPeersMap, selectTracksMap],\n (peersMap, tracksMap) => {\n const participants: HMSPeerWithMuteStatus[] = Object.values(peersMap).map(peer => {\n return {\n peer: peer,\n isAudioEnabled: peer.audioTrack ? tracksMap[peer.audioTrack]?.enabled : false,\n };\n });\n return participants;\n },\n);\n\nconst selectRoleChangeStoreRequest = (store: HMSStore) => {\n return store.roleChangeRequests[0] || null;\n};\n\n/**\n * Select the role change request received for your local peer.\n */\nexport const selectRoleChangeRequest = createSelector(\n [selectRoleChangeStoreRequest, selectPeersMap, selectRolesMap],\n (request, peersMap, rolesMap): HMSRoleChangeRequest | null => {\n if (!request) {\n return null;\n }\n return {\n requestedBy: peersMap[request.requestedBy],\n role: rolesMap[request.roleName],\n token: request.token,\n };\n },\n);\n\n/**\n * Select what streams is the local peer allowed to publish from video, audio and screenshare.\n */\nexport const selectIsAllowedToPublish = createSelector(\n [selectLocalPeerRole],\n (role): HMSPublishAllowed => {\n let video = false,\n audio = false,\n screen = false;\n if (role?.publishParams?.allowed) {\n video = role.publishParams.allowed.includes('video');\n audio = role.publishParams.allowed.includes('audio');\n screen = role.publishParams.allowed.includes('screen');\n }\n return {\n video,\n audio,\n screen,\n };\n },\n);\n","import { createSelector } from 'reselect';\nimport {\n selectLocalAudioTrackID,\n selectLocalVideoTrackID,\n selectRolesMap,\n selectTracksMap,\n} from './selectors';\nimport { HMSTrack } from '../schema';\n\nexport const selectRoleByRoleName = (roleName: string) =>\n createSelector([selectRolesMap], rolesMap => rolesMap[roleName]);\n\nconst selectLocalVideoPlugins = createSelector(\n [selectLocalVideoTrackID, selectTracksMap],\n (trackID, tracksMap) => {\n let track: HMSTrack | null = null;\n if (trackID) {\n track = tracksMap[trackID];\n }\n return track?.plugins || [];\n },\n);\n\nconst selectLocalAudioPlugins = createSelector(\n [selectLocalAudioTrackID, selectTracksMap],\n (trackID, tracksMap) => {\n let track: HMSTrack | null = null;\n if (trackID) {\n track = tracksMap[trackID];\n }\n return track?.plugins || [];\n },\n);\n\nexport const selectIsLocalVideoPluginPresent = (pluginName: string) => {\n return createSelector([selectLocalVideoPlugins], plugins => {\n return plugins.includes(pluginName);\n });\n};\n\nexport const selectIsLocalAudioPluginPresent = (pluginName: string) => {\n return createSelector([selectLocalAudioPlugins], plugins => {\n return plugins.includes(pluginName);\n });\n};\n","import { HMSTrack, HMSRemoteAudioTrack, HMSRemoteVideoTrack } from '@100mslive/hms-video';\n\nexport function isRemoteTrack(track: HMSTrack) {\n return track instanceof HMSRemoteAudioTrack || track instanceof HMSRemoteVideoTrack;\n}\n","import { HMSPlaylistItem, HMSPlaylistType, IHMSPlaylistActions } from '../schema';\nimport { HMSPlaylistManager } from './sdkTypes';\nimport { HMSLogger } from '../../common/ui-logger';\nimport { IHMSStore } from '../IHMSStore';\nimport { selectVideoPlaylist, selectAudioPlaylist } from '../selectors';\n\nexport class HMSPlaylist implements IHMSPlaylistActions {\n private type: HMSPlaylistType;\n constructor(\n private playlistManager: HMSPlaylistManager,\n type: HMSPlaylistType,\n private syncPlaylistState: (action: string) => void,\n private store: IHMSStore,\n ) {\n this.type = type;\n }\n\n async play(id: string): Promise<void> {\n if (!id) {\n HMSLogger.w('Please pass id to play');\n return;\n }\n await this.playlistManager.setEnabled(true, { id, type: this.type });\n }\n\n async pause(): Promise<void> {\n const selector =\n this.type === HMSPlaylistType.audio ? selectAudioPlaylist : selectVideoPlaylist;\n const selection = this.store.getState(selector.selection);\n if (!selection.id) {\n HMSLogger.w('No item is currently playing to pause');\n return;\n }\n await this.playlistManager.setEnabled(false, { id: selection.id, type: this.type });\n }\n\n async playNext(): Promise<void> {\n await this.playlistManager.playNext(this.type);\n }\n\n async playPrevious(): Promise<void> {\n await this.playlistManager.playPrevious(this.type);\n }\n\n seek(seekValue: number): void {\n this.playlistManager.seek(seekValue, this.type);\n this.syncPlaylistState(`seekOn${this.type}Playlist`);\n }\n\n seekTo(seekValue: number): void {\n this.playlistManager.seekTo(seekValue, this.type);\n this.syncPlaylistState(`seekToOn${this.type}Playlist`);\n }\n\n setVolume(volume: number): void {\n this.playlistManager.setVolume(volume, this.type);\n this.syncPlaylistState(`setVolumeOn${this.type}Playlist`);\n }\n\n setList<T>(list: HMSPlaylistItem<T>[]): void {\n this.playlistManager.setList(list);\n this.syncPlaylistState(`setListOn${this.type}Playlist`);\n }\n\n async stop(): Promise<void> {\n await this.playlistManager.stop(this.type);\n this.syncPlaylistState(`stop${this.type}Playlist`);\n }\n}\n","import {\n createDefaultStoreState,\n HMSMediaSettings,\n HMSMessage,\n HMSMessageInput,\n HMSPeer,\n HMSPeerID,\n HMSPlaylistType,\n HMSRoomState,\n HMSStore,\n HMSTrack,\n HMSTrackID,\n HMSTrackSource,\n HMSChangeMultiTrackStateParams,\n IHMSPlaylistActions,\n} from '../schema';\nimport { IHMSActions } from '../IHMSActions';\nimport * as sdkTypes from './sdkTypes';\nimport { SDKToHMS } from './adapter';\nimport {\n HMSRoleChangeRequest,\n selectHMSMessagesCount,\n selectIsLocalScreenShared,\n selectIsLocalVideoDisplayEnabled,\n selectIsLocalVideoEnabled,\n selectLocalAudioTrackID,\n selectLocalPeer,\n selectLocalTrackIDs,\n selectLocalVideoTrackID,\n selectPeerByID,\n selectPermissions,\n selectRolesMap,\n selectRoomStarted,\n selectRoomState,\n selectLocalMediaSettings,\n selectTrackByID,\n selectTracksMap,\n} from '../selectors';\nimport { HMSLogger } from '../../common/ui-logger';\nimport {\n HMSAudioPlugin,\n HMSAudioTrack as SDKHMSAudioTrack,\n HMSException as SDKHMSException,\n HMSLeaveRoomRequest as SDKHMSLeaveRoomRequest,\n HMSLocalAudioTrack as SDKHMSLocalAudioTrack,\n HMSLocalTrack as SDKHMSLocalTrack,\n HMSLocalVideoTrack as SDKHMSLocalVideoTrack,\n HMSLogLevel,\n HMSRemoteTrack as SDKHMSRemoteTrack,\n HMSRemoteVideoTrack as SDKHMSRemoteVideoTrack,\n HMSRoleChangeRequest as SDKHMSRoleChangeRequest,\n HMSChangeTrackStateRequest as SDKHMSChangeTrackStateRequest,\n HMSChangeMultiTrackStateParams as SDKHMSChangeMultiTrackStateParams,\n HMSChangeMultiTrackStateRequest as SDKHMSChangeMultiTrackStateRequest,\n HMSSdk,\n HMSSimulcastLayer,\n HMSTrack as SDKHMSTrack,\n HMSVideoPlugin,\n HMSVideoTrack as SDKHMSVideoTrack,\n} from '@100mslive/hms-video';\nimport { IHMSStore } from '../IHMSStore';\n\nimport {\n areArraysEqual,\n mergeNewPeersInDraft,\n mergeNewTracksInDraft,\n} from './sdkUtils/storeMergeUtils';\nimport { HMSNotifications } from './HMSNotifications';\nimport { NamedSetState } from './internalTypes';\nimport { isRemoteTrack } from './sdkUtils/sdkUtils';\nimport { HMSPlaylist } from './HMSPlaylist';\n// import { ActionBatcher } from './sdkUtils/ActionBatcher';\n\n/**\n * This class implements the IHMSActions interface for 100ms SDK. It connects with SDK\n * and takes control of data management by letting every action pass through it. The\n * passed in store is ensured to be the single source of truth reflecting current\n * room related data at any point in time.\n *\n * @privateRemarks\n * Things to keep in mind while updating store -\n * 1. Treat setState as an atomic operation, if an action results in multiple changes,\n * the changes should all happen within single setState function.\n * 2. While updating the state it's very important to not update the reference if\n * something is unchanged. Copy data in same reference object don't assign new\n * object.\n * 3. Mental Model(1) - Actions from backend -> Listeners of this class -> update store -> views update themselves\n * eg. for this - peer added, remote muted etc.\n * 4. Mental Model(2) - Actions from local -> View calls actions -> update store -> views update themselves\n * eg. local track enabled, join, leave etc.\n * 5. State is immutable, a new copy with new references is created when there is a change,\n * if you try to modify state outside of setState, there'll be an error.\n */\nexport class HMSSDKActions implements IHMSActions {\n private hmsSDKTracks: Record<string, SDKHMSTrack> = {};\n private hmsSDKPeers: Record<string, sdkTypes.HMSPeer> = {};\n private readonly sdk: HMSSdk;\n private readonly store: IHMSStore;\n private isRoomJoinCalled: boolean = false;\n private hmsNotifications: HMSNotifications;\n // private actionBatcher: ActionBatcher;\n audioPlaylist!: IHMSPlaylistActions;\n videoPlaylist!: IHMSPlaylistActions;\n\n constructor(store: IHMSStore, sdk: HMSSdk, notificationManager: HMSNotifications) {\n this.store = store;\n this.sdk = sdk;\n this.hmsNotifications = notificationManager;\n // this.actionBatcher = new ActionBatcher(store);\n }\n\n async unblockAudio() {\n await this.sdk.getAudioOutput().unblockAutoplay();\n }\n\n setVolume(value: number, trackId?: HMSTrackID): void {\n if (trackId) {\n this.setTrackVolume(value, trackId);\n } else {\n this.sdk.getAudioOutput().setVolume(value);\n this.syncRoomState('setOutputVolume');\n }\n }\n\n setAudioOutputDevice(deviceId: string): void {\n const deviceInfo = this.sdk.getAudioOutput().setDevice(deviceId);\n if (deviceInfo) {\n this.setState(draftStore => {\n draftStore.settings.audioOutputDeviceId = deviceId;\n }, 'setAudioOutputDevice');\n }\n }\n\n setPreferredLayer(trackId: string, layer: HMSSimulcastLayer) {\n const track = this.hmsSDKTracks[trackId];\n if (track) {\n if (track instanceof SDKHMSRemoteVideoTrack) {\n track.preferLayer(layer);\n this.updateVideoLayer(trackId, 'setPreferredLayer');\n } else {\n HMSLogger.w(`track ${trackId} is not an video track`);\n }\n } else {\n this.logPossibleInconsistency(`track ${trackId} not present, unable to set preffer layer`);\n }\n }\n\n async preview(config: sdkTypes.HMSConfig) {\n if (this.isRoomJoinCalled) {\n this.logPossibleInconsistency('attempting to call preview after join was called');\n return; // ignore\n }\n const roomState = this.store.getState(selectRoomState);\n if (roomState === HMSRoomState.Preview || roomState === HMSRoomState.Connecting) {\n this.logPossibleInconsistency(\n 'attempting to call preview while room is in preview/connecting',\n );\n return;\n }\n\n try {\n await this.sdkPreviewWithListeners(config);\n this.setState(store => {\n store.room.roomState = HMSRoomState.Connecting;\n }, 'preview');\n } catch (err) {\n HMSLogger.e('Cannot show preview. Failed to connect to room - ', err);\n throw err;\n }\n }\n\n join(config: sdkTypes.HMSConfig) {\n if (this.isRoomJoinCalled) {\n this.logPossibleInconsistency('room join is called again');\n return; // ignore\n }\n try {\n this.sdkJoinWithListeners(config);\n this.isRoomJoinCalled = true;\n this.setState(store => {\n store.room.roomState = HMSRoomState.Connecting;\n }, 'join');\n } catch (err) {\n this.isRoomJoinCalled = false; // so it can be called again if needed\n HMSLogger.e('Failed to connect to room - ', err);\n throw err;\n }\n }\n\n async leave() {\n const hasRoomStarted = this.store.getState(selectRoomStarted);\n if (!hasRoomStarted) {\n this.logPossibleInconsistency('room leave is called when no room is connected');\n return; // ignore\n }\n return this.sdk\n .leave()\n .then(() => {\n this.resetState('leave');\n HMSLogger.i('left room');\n })\n .catch(err => {\n HMSLogger.e('error in leaving room - ', err);\n });\n }\n\n async setScreenShareEnabled(enabled: boolean, audioOnly?: boolean) {\n if (enabled) {\n await this.startScreenShare(audioOnly);\n } else {\n await this.stopScreenShare();\n }\n }\n\n async addTrack(track: MediaStreamTrack, type: HMSTrackSource = 'regular') {\n await this.sdk.addTrack(track, type);\n this.syncRoomState('addTrack');\n }\n\n async removeTrack(trackId: string) {\n await this.sdk.removeTrack(trackId);\n this.syncRoomState('removeTrack');\n }\n\n async setLocalAudioEnabled(enabled: boolean) {\n const trackID = this.store.getState(selectLocalAudioTrackID);\n if (trackID) {\n await this.setEnabledTrack(trackID, enabled);\n }\n }\n\n async setLocalVideoEnabled(enabled: boolean) {\n const trackID = this.store.getState(selectLocalVideoTrackID);\n if (trackID) {\n await this.setEnabledTrack(trackID, enabled);\n }\n }\n\n async setEnabledTrack(trackID: string, enabled: boolean) {\n // if mute/unmute is clicked multiple times for same operation, ignore repeated ones\n const alreadyInSameState = this.store.getState().tracks[trackID]?.enabled === enabled;\n if (alreadyInSameState) {\n // it could also be a case of possible inconsistency where UI state is out of sync with truth\n this.logPossibleInconsistency(`local track[${trackID}] enabled state - ${enabled}`);\n return;\n }\n this.setState(store => {\n // show on UI immediately\n if (!store.tracks[trackID]) {\n this.logPossibleInconsistency('track id not found for setEnabled');\n } else {\n store.tracks[trackID].displayEnabled = enabled;\n }\n }, 'displayEnabled');\n try {\n await this.setEnabledSDKTrack(trackID, enabled); // do the operation\n this.syncRoomState('setEnabled');\n } catch (err) {\n // rollback on failure\n this.setState(store => {\n store.tracks[trackID].displayEnabled = !enabled;\n }, 'rollbackDisplayEnabled');\n this.hmsNotifications.sendError(SDKToHMS.convertException(err as SDKHMSException));\n throw err;\n }\n const type = enabled\n ? sdkTypes.HMSTrackUpdate.TRACK_UNMUTED\n : sdkTypes.HMSTrackUpdate.TRACK_MUTED;\n this.hmsNotifications.sendTrackUpdate(type, trackID);\n }\n\n async setAudioSettings(settings: Partial<sdkTypes.HMSAudioTrackSettings>) {\n const trackID = this.store.getState(selectLocalAudioTrackID);\n if (trackID) {\n await this.setSDKLocalAudioTrackSettings(trackID, settings);\n this.syncRoomState('setAudioSettings');\n }\n }\n\n async setVideoSettings(settings: Partial<sdkTypes.HMSVideoTrackSettings>) {\n const trackID = this.store.getState(selectLocalVideoTrackID);\n if (trackID) {\n await this.setSDKLocalVideoTrackSettings(trackID, settings);\n this.syncRoomState('setVideoSettings');\n }\n }\n\n sendMessage(message: string) {\n this.sendBroadcastMessage(message);\n }\n\n async sendBroadcastMessage(message: string, type?: string) {\n const sdkMessage = await this.sdk.sendBroadcastMessage(message, type);\n this.updateMessageInStore(sdkMessage, { message, type });\n }\n\n async sendGroupMessage(message: string, roles: string[], type?: string) {\n const storeRoles = this.store.getState(selectRolesMap);\n const hmsRoles = roles.map(roleName => {\n return storeRoles[roleName];\n });\n const sdkMessage = await this.sdk.sendGroupMessage(message, hmsRoles, type);\n this.updateMessageInStore(sdkMessage, { message, recipientRoles: roles, type });\n }\n\n async sendDirectMessage(message: string, peerID: string, type?: string) {\n const hmsPeer = this.hmsSDKPeers[peerID];\n const sdkMessage = await this.sdk.sendDirectMessage(message, hmsPeer);\n this.updateMessageInStore(sdkMessage, { message, recipientPeer: hmsPeer.peerId, type });\n }\n\n private updateMessageInStore(\n sdkMessage: sdkTypes.HMSMessage | void,\n messageInput: string | HMSMessageInput,\n ) {\n if (!sdkMessage) {\n HMSLogger.w('sendMessage', 'Failed to send message', messageInput);\n throw Error(`sendMessage Failed - ${JSON.stringify(messageInput)}`);\n }\n const hmsMessage = SDKToHMS.convertMessage(sdkMessage) as HMSMessage;\n hmsMessage.read = true;\n hmsMessage.senderName = 'You';\n this.onHMSMessage(hmsMessage);\n return hmsMessage;\n }\n\n setMessageRead(readStatus: boolean, messageId?: string) {\n this.setState(store => {\n if (messageId) {\n if (!store.messages.byID[messageId]) {\n this.logPossibleInconsistency('no message with id is found');\n } else {\n store.messages.byID[messageId].read = readStatus;\n }\n } else {\n store.messages.allIDs.forEach((id: string) => {\n store.messages.byID[id].read = readStatus;\n });\n }\n }, 'setMessageRead');\n }\n\n async attachVideo(trackID: string, videoElement: HTMLVideoElement) {\n if (this.localAndVideoUnmuting(trackID)) {\n // wait till video unmute has finished\n return new Promise<void>(resolve => {\n const unsub = this.store.subscribe(async enabled => {\n if (enabled) {\n await this.attachVideoInternal(trackID, videoElement);\n unsub();\n resolve();\n }\n }, selectIsLocalVideoEnabled);\n });\n } else {\n await this.attachVideoInternal(trackID, videoElement);\n }\n }\n\n async detachVideo(trackID: string, videoElement: HTMLVideoElement) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack && sdkTrack.type === 'video') {\n await (sdkTrack as SDKHMSVideoTrack).removeSink(videoElement);\n this.updateVideoLayer(trackID, 'detachVideo');\n } else {\n this.logPossibleInconsistency('no video track found to remove sink');\n }\n }\n\n async addPluginToVideoTrack(plugin: HMSVideoPlugin, pluginFrameRate?: number): Promise<void> {\n return this.addRemoveVideoPlugin(plugin, 'add', pluginFrameRate);\n }\n async addPluginToAudioTrack(plugin: HMSAudioPlugin): Promise<void> {\n return this.addRemoveAudioPlugin(plugin, 'add');\n }\n\n async removePluginFromVideoTrack(plugin: HMSVideoPlugin): Promise<void> {\n return this.addRemoveVideoPlugin(plugin, 'remove');\n }\n async removePluginFromAudioTrack(plugin: HMSAudioPlugin): Promise<void> {\n return this.addRemoveAudioPlugin(plugin, 'remove');\n }\n\n async changeRole(forPeerId: string, toRole: string, force: boolean = false) {\n const peer = this.hmsSDKPeers[forPeerId];\n if (!peer) {\n this.logPossibleInconsistency(`Unknown peer ID given ${forPeerId} for changerole`);\n return;\n }\n\n await this.sdk.changeRole(peer, toRole, force);\n }\n\n // TODO: separate out role related things in another file\n async acceptChangeRole(request: HMSRoleChangeRequest) {\n let sdkPeer: sdkTypes.HMSPeer | undefined = request.requestedBy\n ? this.hmsSDKPeers[request.requestedBy.id]\n : undefined;\n if (!sdkPeer) {\n HMSLogger.w(\n `peer for which role change is requested no longer available - ${request.requestedBy}`,\n );\n }\n const sdkRequest = {\n requestedBy: sdkPeer,\n role: request.role,\n token: request.token,\n };\n // TODO: hotfix for HMS-3639. Needs a better solution\n //@ts-ignore\n await this.sdk.acceptChangeRole(sdkRequest);\n this.removeRoleChangeRequest(request);\n }\n\n /**\n * @privateRemarks\n * there is no corresponding sdk method for rejecting change role but as the store also maintains the full\n * state of current pending requests, this method allows it to clean up when the request is rejected\n */\n rejectChangeRole(request: HMSRoleChangeRequest) {\n this.removeRoleChangeRequest(request);\n }\n\n async endRoom(lock: boolean, reason: string) {\n const permissions = this.store.getState(selectPermissions);\n if (!permissions?.endRoom) {\n HMSLogger.w('You are not allowed to perform this action - endRoom');\n return;\n }\n await this.sdk.endRoom(lock, reason);\n }\n\n async removePeer(peerID: string, reason: string) {\n const peer = this.hmsSDKPeers[peerID];\n if (peer && !peer.isLocal) {\n await this.sdk.removePeer(peer as sdkTypes.HMSRemotePeer, reason);\n } else {\n this.logPossibleInconsistency(`No remote peer found for peerID - ${peerID}`);\n return;\n }\n }\n\n async startRTMPOrRecording(params: sdkTypes.RTMPRecordingConfig) {\n await this.sdk.startRTMPOrRecording(params);\n }\n\n async stopRTMPAndRecording() {\n await this.sdk.stopRTMPAndRecording();\n }\n\n async setRemoteTrackEnabled(trackID: HMSTrackID | HMSTrackID[], enabled: boolean) {\n if (typeof trackID === 'string') {\n const track = this.hmsSDKTracks[trackID];\n if (track && isRemoteTrack(track)) {\n await this.sdk.changeTrackState(track as SDKHMSRemoteTrack, enabled);\n } else {\n this.logPossibleInconsistency(\n `No remote track with ID ${trackID} found for change track state`,\n );\n }\n } else if (Array.isArray(trackID)) {\n trackID.forEach(id => this.setRemoteTrackEnabled(id, enabled));\n }\n }\n\n async setRemoteTracksEnabled(params: HMSChangeMultiTrackStateParams) {\n const sdkRequest: SDKHMSChangeMultiTrackStateParams = {\n enabled: params.enabled,\n type: params.type,\n source: params.source,\n };\n if (params.roles) {\n const rolesMap = this.store.getState(selectRolesMap);\n sdkRequest.roles = params.roles.map(role => rolesMap[role]);\n }\n await this.sdk.changeMultiTrackState(sdkRequest);\n }\n\n setLogLevel(level: HMSLogLevel) {\n HMSLogger.level = level;\n this.sdk.setLogLevel(level);\n }\n\n private resetState(reason: string = 'resetState') {\n this.setState(store => {\n Object.assign(store, createDefaultStoreState());\n }, reason);\n this.isRoomJoinCalled = false;\n this.hmsSDKTracks = {};\n HMSLogger.cleanUp();\n }\n\n private sdkJoinWithListeners(config: sdkTypes.HMSConfig) {\n this.sdk.join(config, {\n onJoin: this.onJoin.bind(this),\n onRoomUpdate: this.onRoomUpdate.bind(this),\n onPeerUpdate: this.onPeerUpdate.bind(this),\n onTrackUpdate: this.onTrackUpdate.bind(this),\n onMessageReceived: this.onMessageReceived.bind(this),\n onError: this.onError.bind(this),\n onReconnected: this.onReconnected.bind(this),\n onReconnecting: this.onReconnecting.bind(this),\n onRoleChangeRequest: this.onRoleChangeRequest.bind(this),\n onRoleUpdate: this.onRoleUpdate.bind(this),\n onDeviceChange: this.onDeviceChange.bind(this),\n onChangeTrackStateRequest: this.onChangeTrackStateRequest.bind(this),\n onChangeMultiTrackStateRequest: this.onChangeMultiTrackStateRequest.bind(this),\n onRemovedFromRoom: this.onRemovedFromRoom.bind(this),\n });\n this.sdk.addAudioListener({\n onAudioLevelUpdate: this.onAudioLevelUpdate.bind(this),\n });\n }\n\n private onRemovedFromRoom(request: SDKHMSLeaveRoomRequest) {\n const requestedBy = this.store.getState(selectPeerByID(request.requestedBy.peerId));\n if (!requestedBy) {\n this.logPossibleInconsistency(\n `Not found peer who requested leave room, ${request.requestedBy}`,\n );\n return;\n }\n this.hmsNotifications.sendLeaveRoom({\n ...request,\n requestedBy,\n });\n HMSLogger.i('resetting state after peer removed', request);\n this.resetState(request.roomEnded ? 'roomEnded' : 'removedFromRoom');\n }\n\n private onDeviceChange(event: sdkTypes.HMSDeviceChangeEvent) {\n const devices = event.devices;\n if (!devices) {\n return;\n }\n const localPeer = this.store.getState(selectLocalPeer);\n this.setState(store => {\n if (!areArraysEqual(store.devices.audioInput, devices.audioInput)) {\n store.devices.audioInput = devices.audioInput;\n }\n if (!areArraysEqual(store.devices.videoInput, devices.videoInput)) {\n store.devices.videoInput = devices.videoInput;\n }\n if (!areArraysEqual(store.devices.audioOutput, devices.audioOutput)) {\n store.devices.audioOutput = devices.audioOutput;\n }\n if (this.hmsSDKPeers[localPeer?.id]) {\n Object.assign(store.settings, this.getMediaSettings(this.hmsSDKPeers[localPeer?.id]));\n }\n }, 'deviceChange');\n // sync is needed to update the current selected device\n // this.syncRoomState('deviceChangeSync');\n // send notification only on device change - selection is present\n if (event.selection) {\n const notification = SDKToHMS.convertDeviceChangeUpdate(event);\n this.hmsNotifications.sendDeviceChange(notification);\n }\n }\n\n private async sdkPreviewWithListeners(config: sdkTypes.HMSConfig) {\n await this.sdk.preview(config, {\n onPreview: this.onPreview.bind(this),\n onError: this.onError.bind(this),\n onDeviceChange: this.onDeviceChange.bind(this),\n });\n this.sdk.addAudioListener({\n onAudioLevelUpdate: this.onAudioLevelUpdate.bind(this),\n });\n }\n\n private async startScreenShare(audioOnly?: boolean) {\n const isScreenShared = this.store.getState(selectIsLocalScreenShared);\n if (!isScreenShared) {\n await this.sdk.startScreenShare(() => this.syncRoomState('screenshareStopped'), audioOnly);\n this.syncRoomState('startScreenShare');\n } else {\n this.logPossibleInconsistency(\"start screenshare is called while it's on\");\n }\n }\n\n private async stopScreenShare() {\n const isScreenShared = this.store.getState(selectIsLocalScreenShared);\n if (isScreenShared) {\n await this.sdk.stopScreenShare();\n this.syncRoomState('stopScreenShare');\n } else {\n this.logPossibleInconsistency(\"stop screenshare is called while it's not on\");\n }\n }\n\n private async attachVideoInternal(trackID: string, videoElement: HTMLVideoElement) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack && sdkTrack.type === 'video') {\n await (sdkTrack as SDKHMSVideoTrack).addSink(videoElement);\n this.updateVideoLayer(trackID, 'attachVideo');\n } else {\n this.logPossibleInconsistency('no video track found to add sink');\n }\n }\n\n /**\n * This is a very important function as it's responsible for maintaining the source of\n * truth with maximum efficiency. The efficiency comes from the fact that the only\n * those portions of the store are updated which have actually changed.\n * While making a change in this function don't use functions like map, reduce etc.\n * which return a new copy of the data. Use Object.assign etc. to ensure that if the data\n * doesn't change reference is also not changed.\n * The UI and selectors rely on the fact that the store is immutable that is if there is\n * any change and only if there is a change, they'll get a new copy of the data they're\n * interested in with a new reference.\n * @protected\n */\n protected syncRoomState(action?: string) {\n HMSLogger.time(`store-sync-${action}`);\n const newHmsPeers: Record<HMSPeerID, Partial<HMSPeer>> = {};\n const newHmsPeerIDs: HMSPeerID[] = []; // to add in room.peers\n const newHmsTracks: Record<HMSTrackID, Partial<HMSTrack>> = {};\n const newHmsSDkTracks: Record<HMSTrackID, SDKHMSTrack> = {};\n const newMediaSettings: Partial<HMSMediaSettings> = {};\n\n const sdkPeers: sdkTypes.HMSPeer[] = this.sdk.getPeers();\n\n // first convert everything in the new format\n for (let sdkPeer of sdkPeers) {\n const hmsPeer = SDKToHMS.convertPeer(sdkPeer);\n newHmsPeers[hmsPeer.id] = hmsPeer;\n newHmsPeerIDs.push(hmsPeer.id);\n this.hmsSDKPeers[hmsPeer.id] = sdkPeer;\n\n const sdkTracks = [sdkPeer.audioTrack, sdkPeer.videoTrack, ...sdkPeer.auxiliaryTracks];\n for (let sdkTrack of sdkTracks) {\n if (!sdkTrack) {\n continue;\n }\n const hmsTrack = SDKToHMS.convertTrack(sdkTrack);\n newHmsTracks[hmsTrack.id] = hmsTrack;\n newHmsSDkTracks[sdkTrack.trackId] = sdkTrack;\n }\n\n if (hmsPeer.isLocal) {\n Object.assign(newMediaSettings, this.getMediaSettings(sdkPeer));\n }\n }\n\n const recording = this.sdk.getRecordingState();\n const rtmp = this.sdk.getRTMPState();\n\n // then merge them carefully with our store so if something hasn't changed\n // the reference shouldn't change. Note that the draftStore is an immer draft\n // object.\n this.setState(draftStore => {\n draftStore.room.peers = newHmsPeerIDs;\n const draftPeers = draftStore.peers;\n const draftTracks = draftStore.tracks;\n // the order of below statements are important as merge functions are mutating\n mergeNewPeersInDraft(draftPeers, newHmsPeers, newHmsTracks, newHmsSDkTracks);\n mergeNewTracksInDraft(draftTracks, newHmsTracks);\n Object.assign(draftStore.settings, newMediaSettings);\n this.hmsSDKTracks = newHmsSDkTracks;\n Object.assign(draftStore.roles, SDKToHMS.convertRoles(this.sdk.getRoles()));\n Object.assign(draftStore.playlist, SDKToHMS.convertPlaylist(this.sdk.getPlaylistManager()));\n Object.assign(draftStore.room, SDKToHMS.convertRecordingRTMPState(recording, rtmp));\n }, action);\n HMSLogger.timeEnd(`store-sync-${action}`);\n }\n\n protected onPreview(sdkRoom: sdkTypes.HMSRoom) {\n this.setState(store => {\n Object.assign(store.room, SDKToHMS.convertRoom(sdkRoom));\n store.room.roomState = HMSRoomState.Preview;\n }, 'previewStart');\n this.syncRoomState('previewSync');\n }\n\n protected onJoin(sdkRoom: sdkTypes.HMSRoom) {\n this.audioPlaylist = new HMSPlaylist(\n this.sdk.getPlaylistManager(),\n HMSPlaylistType.audio,\n this.syncPlaylistState.bind(this),\n this.store,\n );\n this.videoPlaylist = new HMSPlaylist(\n this.sdk.getPlaylistManager(),\n HMSPlaylistType.video,\n this.syncRoomState.bind(this),\n this.store,\n );\n this.syncRoomState('joinSync');\n this.setState(store => {\n Object.assign(store.room, SDKToHMS.convertRoom(sdkRoom));\n store.room.isConnected = true;\n store.room.roomState = HMSRoomState.Connected;\n }, 'joined');\n this.sdk.getPlaylistManager().onProgress(this.setProgress);\n this.sdk.getPlaylistManager().onNewTrackStart((item: sdkTypes.HMSPlaylistItem<any>) => {\n this.syncPlaylistState(`${item.type}PlaylistUpdate`);\n });\n this.sdk.getPlaylistManager().onPlaylistEnded((type: HMSPlaylistType) => {\n this.syncPlaylistState(`${type}PlaylistEnded`);\n });\n }\n\n //@ts-ignore\n protected onRoomUpdate(type: sdkTypes.HMSRoomUpdate, room: sdkTypes.HMSRoom) {\n this.setState(store => {\n Object.assign(store.room, SDKToHMS.convertRoom(room));\n }, 'RoomUpdate');\n }\n\n protected onPeerUpdate(\n type: sdkTypes.HMSPeerUpdate,\n sdkPeer: sdkTypes.HMSPeer | sdkTypes.HMSPeer[],\n ) {\n if (\n type === sdkTypes.HMSPeerUpdate.BECAME_DOMINANT_SPEAKER ||\n type === sdkTypes.HMSPeerUpdate.RESIGNED_DOMINANT_SPEAKER\n ) {\n return; // ignore, high frequency update so no point of syncing peers\n } else if (Array.isArray(sdkPeer)) {\n this.syncRoomState('peersJoined');\n const hmsPeers = [];\n for (let peer of sdkPeer) {\n const hmsPeer = this.store.getState(selectPeerByID(peer.peerId));\n if (hmsPeer) {\n hmsPeers.push(hmsPeer);\n }\n }\n this.hmsNotifications.sendPeerList(hmsPeers);\n } else {\n this.peerUpdateInternal(type, sdkPeer);\n }\n }\n\n protected onTrackUpdate(\n type: sdkTypes.HMSTrackUpdate,\n track: SDKHMSTrack,\n peer: sdkTypes.HMSPeer,\n ) {\n // this check is needed because for track removed case, the notification needs to\n // be send before the track is removed from store\n if (type === sdkTypes.HMSTrackUpdate.TRACK_REMOVED) {\n this.hmsNotifications.sendTrackUpdate(type, track.trackId);\n this.handleTrackRemove(track, peer);\n } else {\n const actionName =\n type === sdkTypes.HMSTrackUpdate.TRACK_ADDED ? 'trackAdded' : 'trackUpdate';\n this.syncRemoteTrackState(actionName, track, peer);\n this.hmsNotifications.sendTrackUpdate(type, track.trackId);\n }\n }\n\n protected onMessageReceived(sdkMessage: sdkTypes.HMSMessage) {\n const hmsMessage = SDKToHMS.convertMessage(sdkMessage) as HMSMessage;\n hmsMessage.read = false;\n this.onHMSMessage(hmsMessage);\n this.hmsNotifications.sendMessageReceived(hmsMessage);\n }\n\n protected onHMSMessage(hmsMessage: HMSMessage) {\n this.setState(store => {\n hmsMessage.id = String(this.store.getState(selectHMSMessagesCount) + 1);\n store.messages.byID[hmsMessage.id] = hmsMessage;\n store.messages.allIDs.push(hmsMessage.id);\n }, 'newMessage');\n }\n\n /*\n * Note: speakers array contain the value only for peers who have audioLevel != 0\n */\n protected onAudioLevelUpdate(sdkSpeakers: sdkTypes.HMSSpeaker[]) {\n this.setState(store => {\n const trackIDAudioLevelMap: Record<HMSPeerID, number> = {};\n sdkSpeakers.forEach(sdkSpeaker => {\n if (!sdkSpeaker.track || !sdkSpeaker.peer) {\n return;\n }\n const trackID = sdkSpeaker.track.trackId;\n trackIDAudioLevelMap[trackID] = sdkSpeaker.audioLevel;\n if (!store.speakers[trackID]) {\n // Set store instances(peers, tracks) references in speaker, not the new ones received.\n store.speakers[trackID] = {\n audioLevel: sdkSpeaker.audioLevel,\n peerID: sdkSpeaker.peer.peerId,\n trackID: trackID,\n };\n }\n });\n const speakerEntries = Object.entries(store.speakers);\n for (let [trackID, speaker] of speakerEntries) {\n speaker.audioLevel = trackIDAudioLevelMap[trackID] || 0;\n if (speaker.audioLevel === 0) {\n delete store.speakers[trackID];\n }\n }\n }, 'audioLevel');\n }\n\n protected onChangeTrackStateRequest(request: SDKHMSChangeTrackStateRequest) {\n const requestedBy = this.store.getState(selectPeerByID(request.requestedBy.peerId));\n const storeTrackID = this.getStoreLocalTrackIDfromSDKTrack(request.track);\n const track = this.store.getState(selectTrackByID(storeTrackID));\n\n if (!requestedBy) {\n return this.logPossibleInconsistency(\n `Not found peer who requested track state change, ${request.requestedBy}`,\n );\n }\n if (!track) {\n return this.logPossibleInconsistency(\n `Not found track for which track state change was requested, ${request.track}`,\n );\n }\n\n if (!request.enabled) {\n this.syncRoomState('changeTrackStateRequest');\n }\n\n this.hmsNotifications.sendChangeTrackStateRequest({\n requestedBy,\n track,\n enabled: request.enabled,\n });\n }\n\n protected onChangeMultiTrackStateRequest(request: SDKHMSChangeMultiTrackStateRequest) {\n const requestedBy = this.store.getState(selectPeerByID(request.requestedBy.peerId));\n\n if (!requestedBy) {\n return this.logPossibleInconsistency(\n `Not found peer who requested track state change, ${request.requestedBy}`,\n );\n }\n\n if (!request.enabled) {\n this.syncRoomState('changeMultiTrackStateRequest');\n }\n\n const tracks: HMSTrack[] = [];\n const tracksMap = this.store.getState(selectTracksMap);\n for (const track of request.tracks) {\n const storeTrackID = this.getStoreLocalTrackIDfromSDKTrack(track);\n if (storeTrackID && tracksMap[storeTrackID]) {\n tracks.push(tracksMap[storeTrackID]);\n }\n }\n\n this.hmsNotifications.sendChangeMultiTrackStateRequest({\n requestedBy,\n tracks,\n enabled: request.enabled,\n type: request.type,\n source: request.source,\n });\n }\n\n protected onReconnected() {\n this.syncRoomState('reconnectedSync');\n this.hmsNotifications.sendReconnected();\n this.setState(store => {\n store.room.roomState = HMSRoomState.Connected;\n }, 'reconnected');\n }\n\n protected onReconnecting(sdkError: SDKHMSException) {\n const error = SDKToHMS.convertException(sdkError);\n HMSLogger.e('Reconnection: received error from sdk', error);\n this.hmsNotifications.sendReconnecting(error);\n this.setState(store => {\n store.room.roomState = HMSRoomState.Reconnecting;\n store.errors.push(error);\n }, 'reconnecting');\n }\n\n protected onError(sdkException: SDKHMSException) {\n const error = SDKToHMS.convertException(sdkException);\n if (error.isTerminal) {\n // terminal error leave room as it is not recoverable\n this.leave().then(() => console.log('error from SDK, left room.'));\n this.setState(store => {\n store.room.roomState = HMSRoomState.Failed;\n store.errors.push(error);\n }, 'errorTerminal');\n } else {\n const numExistingErrors = this.store.getState().errors.length;\n // just in case there is some infinite loop sending errors\n if (numExistingErrors < 50) {\n this.setState(store => {\n store.errors.push(error);\n }, 'error');\n }\n }\n // send notification\n this.hmsNotifications.sendError(error);\n HMSLogger.e('received error from sdk', error);\n }\n\n /**\n * the layer gets updated on addsink/removesink/preferlayer calls, for simulcast there\n * can be multiple layers, while for non simulcast there will be None and High.\n */\n private updateVideoLayer(trackID: string, action: string) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack && sdkTrack instanceof SDKHMSRemoteVideoTrack) {\n this.setState(draft => {\n draft.tracks[trackID].layer = sdkTrack.getSimulcastLayer();\n }, action);\n }\n }\n\n private handleTrackRemove(sdkTrack: SDKHMSTrack, sdkPeer: sdkTypes.HMSPeer) {\n this.setState(draftStore => {\n const hmsPeer = draftStore.peers[sdkPeer.peerId];\n const draftTracks = draftStore.tracks;\n // find and remove the exact track from hmsPeer\n if (this.isSameStoreSDKTrack(sdkTrack.trackId, hmsPeer?.audioTrack)) {\n delete hmsPeer?.audioTrack;\n } else if (this.isSameStoreSDKTrack(sdkTrack.trackId, hmsPeer?.videoTrack)) {\n delete hmsPeer?.videoTrack;\n } else {\n const auxiliaryIndex = hmsPeer?.auxiliaryTracks.indexOf(sdkTrack.trackId);\n if (\n auxiliaryIndex > -1 &&\n this.isSameStoreSDKTrack(sdkTrack.trackId, hmsPeer?.auxiliaryTracks[auxiliaryIndex])\n ) {\n hmsPeer?.auxiliaryTracks.splice(auxiliaryIndex, 1);\n }\n }\n delete draftTracks[sdkTrack.trackId];\n delete this.hmsSDKTracks[sdkTrack.trackId];\n }, 'trackRemoved');\n }\n\n private async setEnabledSDKTrack(trackID: string, enabled: boolean) {\n const track = this.hmsSDKTracks[trackID];\n if (track) {\n await track.setEnabled(enabled);\n } else {\n this.logPossibleInconsistency(`track ${trackID} not present, unable to enabled/disable`);\n }\n }\n\n private async setSDKLocalVideoTrackSettings(\n trackID: string,\n settings: Partial<sdkTypes.HMSVideoTrackSettings>,\n ) {\n const track = this.hmsSDKTracks[trackID] as SDKHMSLocalVideoTrack;\n if (track) {\n await track.setSettings(settings);\n } else {\n this.logPossibleInconsistency(`local track ${trackID} not present, unable to set settings`);\n }\n }\n\n private async setSDKLocalAudioTrackSettings(\n trackID: string,\n settings: Partial<sdkTypes.HMSAudioTrackSettings>,\n ) {\n const track = this.hmsSDKTracks[trackID] as SDKHMSLocalAudioTrack;\n if (track) {\n await track.setSettings(settings);\n } else {\n this.logPossibleInconsistency(`local track ${trackID} not present, unable to set settings`);\n }\n }\n\n private getMediaSettings(sdkPeer: sdkTypes.HMSPeer): Partial<HMSMediaSettings> {\n const settings = this.store.getState(selectLocalMediaSettings);\n const audioTrack = sdkPeer.audioTrack as SDKHMSLocalAudioTrack;\n const videoTrack = sdkPeer.videoTrack as SDKHMSLocalVideoTrack;\n return {\n audioInputDeviceId:\n audioTrack && audioTrack.enabled\n ? audioTrack.getMediaTrackSettings()?.deviceId\n : settings.audioInputDeviceId,\n videoInputDeviceId:\n videoTrack && videoTrack.enabled\n ? videoTrack.getMediaTrackSettings()?.deviceId\n : settings.videoInputDeviceId,\n audioOutputDeviceId: this.sdk.getAudioOutput().getDevice()?.deviceId,\n };\n }\n\n private setTrackVolume(value: number, trackId: HMSTrackID) {\n const track = this.hmsSDKTracks[trackId];\n if (track) {\n if (track instanceof SDKHMSAudioTrack) {\n track.setVolume(value);\n this.setState(draftStore => {\n const track = draftStore.tracks[trackId];\n if (track) {\n track.volume = value;\n }\n }, 'trackVolume');\n } else {\n HMSLogger.w(`track ${trackId} is not an audio track`);\n }\n } else {\n this.logPossibleInconsistency(`track ${trackId} not present, unable to set volume`);\n }\n }\n\n /**\n * Tells if the trackID is for local peer and video unmute is in process\n * @private\n */\n private localAndVideoUnmuting(trackID: string) {\n const localPeer = this.store.getState(selectLocalPeer);\n if (localPeer.videoTrack !== trackID) {\n return false;\n }\n const displayEnabled = this.store.getState(selectIsLocalVideoDisplayEnabled);\n const actuallyEnabled = this.store.getState(selectIsLocalVideoEnabled);\n return displayEnabled && !actuallyEnabled;\n }\n\n private logPossibleInconsistency(inconsistency: string) {\n HMSLogger.w('possible inconsistency detected - ', inconsistency);\n }\n\n private async addRemoveVideoPlugin(\n plugin: HMSVideoPlugin,\n action: 'add' | 'remove',\n pluginFrameRate?: number,\n ) {\n if (!plugin) {\n HMSLogger.w('Invalid plugin received in store');\n return;\n }\n const trackID = this.store.getState(selectLocalVideoTrackID);\n if (trackID) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack) {\n if (action === 'add') {\n await (sdkTrack as SDKHMSLocalVideoTrack).addPlugin(plugin, pluginFrameRate);\n } else if (action === 'remove') {\n await (sdkTrack as SDKHMSLocalVideoTrack).removePlugin(plugin);\n }\n this.syncRoomState(`${action}VideoPlugin`);\n } else {\n this.logPossibleInconsistency(`track ${trackID} not present, unable to remove plugin`);\n }\n }\n }\n private async addRemoveAudioPlugin(plugin: HMSAudioPlugin, action: 'add' | 'remove') {\n if (!plugin) {\n HMSLogger.w('Invalid plugin received in store');\n return;\n }\n const trackID = this.store.getState(selectLocalAudioTrackID);\n if (trackID) {\n const sdkTrack = this.hmsSDKTracks[trackID];\n if (sdkTrack) {\n if (action === 'add') {\n await (sdkTrack as SDKHMSLocalAudioTrack).addPlugin(plugin);\n } else if (action === 'remove') {\n await (sdkTrack as SDKHMSLocalAudioTrack).removePlugin(plugin);\n }\n this.syncRoomState(`${action}AudioPlugin`);\n } else {\n this.logPossibleInconsistency(`track ${trackID} not present, unable to remove plugin`);\n }\n }\n }\n\n /**\n * In case of replace track id is changed but not in store. Given the store id, check the real id\n * sdk is using to refer to the track and match them.\n */\n private isSameStoreSDKTrack(sdkTrackID: string, storeTrackID?: string): boolean {\n if (!storeTrackID) {\n return false;\n }\n return this.hmsSDKTracks[storeTrackID]?.trackId === sdkTrackID;\n }\n\n /**\n * convert new role change requests to store format and save.\n * keep only one request at a time in store till we figure out how to handle multiple requests at the same time\n */\n private onRoleChangeRequest(request: SDKHMSRoleChangeRequest) {\n this.setState(store => {\n if (store.roleChangeRequests.length === 0) {\n store.roleChangeRequests.push(SDKToHMS.convertRoleChangeRequest(request));\n }\n }, 'roleChangeRequest');\n }\n\n private removeRoleChangeRequest(toRemove: HMSRoleChangeRequest) {\n this.setState(store => {\n const index = store.roleChangeRequests.findIndex(req => {\n return req.token === toRemove.token;\n });\n if (index !== -1) {\n store.roleChangeRequests.splice(index, 1);\n }\n }, 'removeRoleChangeRequest');\n }\n\n private onRoleUpdate() {\n this.syncRoomState('roleUpdate');\n }\n\n private getStoreLocalTrackIDfromSDKTrack(sdkTrack: SDKHMSLocalTrack) {\n const trackIDs = this.store.getState(selectLocalTrackIDs);\n return trackIDs.find(trackID => this.hmsSDKTracks[trackID].trackId === sdkTrack.trackId);\n }\n\n private setProgress = ({ type, progress }: sdkTypes.HMSPlaylistProgressEvent) => {\n this.setState(draftStore => {\n draftStore.playlist[type].progress = progress;\n draftStore.playlist[type].currentTime = this.sdk.getPlaylistManager().getCurrentTime(type);\n }, 'playlistProgress');\n };\n\n private syncPlaylistState = (action: string) => {\n this.setState(draftStore => {\n Object.assign(draftStore.playlist, SDKToHMS.convertPlaylist(this.sdk.getPlaylistManager()));\n }, action);\n };\n\n /**\n * Handle store update on remote track changes\n * @param {string} action - 'trackAdded' | 'trackUpdate'\n * @param {SDKHMSTrack} track - track added/updated\n * @param {sdkTypes.HMSPeer}peer - peer on which track is added/updated\n */\n private syncRemoteTrackState = (\n action: 'trackAdded' | 'trackUpdate',\n track: SDKHMSTrack,\n peer: sdkTypes.HMSPeer,\n ) => {\n HMSLogger.time(`${action}-${track.trackId}`);\n this.setState(draftStore => {\n let draftPeer = draftStore.peers[peer.peerId];\n /**\n * in preview -> leave -> join flow or join -> leave -> join flow,\n * since peer will be cleared by leave, set peer again in the store\n **/\n if (!draftPeer) {\n const hmsPeer = SDKToHMS.convertPeer(peer) as HMSPeer;\n draftStore.peers[peer.peerId] = hmsPeer;\n draftPeer = hmsPeer;\n }\n const hmsTrack = SDKToHMS.convertTrack(track, peer.peerId);\n if (action === 'trackAdded') {\n draftStore.tracks[hmsTrack.id] = hmsTrack;\n this.updateTracksInPeer(peer, draftPeer, hmsTrack);\n } else if (draftStore.tracks[hmsTrack.id]) {\n Object.assign(draftStore.tracks[hmsTrack.id], hmsTrack);\n } else {\n this.logPossibleInconsistency(`track ${hmsTrack.id} not present, unable to update track`);\n }\n this.hmsSDKTracks[track.trackId] = track;\n }, action);\n HMSLogger.timeEnd(`${action}-${track.trackId}`);\n };\n\n private peerUpdateInternal(type: sdkTypes.HMSPeerUpdate, sdkPeer: sdkTypes.HMSPeer) {\n // store peer in case it doesn't exist later(will happen if event is peer leave)\n let peer = this.store.getState(selectPeerByID(sdkPeer.peerId));\n let actionName = 'peerUpdate';\n if (type === sdkTypes.HMSPeerUpdate.PEER_JOINED) {\n actionName = 'peerJoined';\n } else if (type === sdkTypes.HMSPeerUpdate.PEER_LEFT) {\n actionName = 'peerLeft';\n }\n HMSLogger.time(`${actionName}-${sdkPeer.peerId}`);\n this.setState(draftStore => {\n if (actionName === 'peerLeft') {\n const index = draftStore.room.peers.indexOf(sdkPeer.peerId);\n if (index > -1) {\n draftStore.room.peers.splice(index, 1);\n }\n delete draftStore.peers[sdkPeer.peerId];\n delete this.hmsSDKPeers[sdkPeer.peerId];\n } else {\n const hmsPeer = SDKToHMS.convertPeer(sdkPeer);\n if (draftStore.peers[hmsPeer.id]) {\n Object.assign(draftStore.peers[hmsPeer.id], hmsPeer);\n } else {\n draftStore.peers[hmsPeer.id] = hmsPeer as HMSPeer;\n draftStore.room.peers.push(hmsPeer.id);\n }\n this.hmsSDKPeers[sdkPeer.peerId] = sdkPeer;\n }\n }, actionName);\n HMSLogger.time(`${actionName}-${sdkPeer.peerId}`);\n // if peer wasn't available before sync(will happen if event is peer join)\n if (!peer) {\n peer = this.store.getState(selectPeerByID(sdkPeer.peerId));\n }\n this.hmsNotifications.sendPeerUpdate(type, peer);\n }\n\n private updateTracksInPeer(peer: sdkTypes.HMSPeer, draftPeer: HMSPeer, hmsTrack: HMSTrack) {\n if (peer.audioTrack?.trackId === hmsTrack.id) {\n draftPeer.audioTrack = hmsTrack.id;\n } else if (peer.videoTrack?.trackId === hmsTrack.id) {\n draftPeer.videoTrack = hmsTrack.id;\n } else if (!draftPeer.auxiliaryTracks.includes(hmsTrack.id)) {\n draftPeer.auxiliaryTracks.push(hmsTrack.id);\n }\n }\n\n /**\n * setState is separate so any future changes to how state change can be done from one place.\n * @param fn\n * @param name\n */\n private setState: NamedSetState<HMSStore> = (fn, name) => {\n return this.store.namedSetState(fn, name);\n };\n}\n","import * as sdkTypes from '../sdkTypes';\nimport { HMSNotificationTypes } from '../../schema';\n\ninterface notifcationMap {\n [key: number]: string;\n}\n\nexport const PEER_NOTIFICATION_TYPES: notifcationMap = {\n [sdkTypes.HMSPeerUpdate.PEER_JOINED]: HMSNotificationTypes.PEER_JOINED,\n [sdkTypes.HMSPeerUpdate.PEER_LEFT]: HMSNotificationTypes.PEER_LEFT,\n [sdkTypes.HMSPeerUpdate.ROLE_UPDATED]: HMSNotificationTypes.ROLE_UPDATED,\n [sdkTypes.HMSPeerUpdate.AUDIO_TOGGLED]: 'PEER_AUDIO_UPDATED',\n [sdkTypes.HMSPeerUpdate.VIDEO_TOGGLED]: 'PEER_VIDEO_UPDATED',\n};\n\nexport const TRACK_NOTIFICATION_TYPES: notifcationMap = {\n [sdkTypes.HMSTrackUpdate.TRACK_ADDED]: HMSNotificationTypes.TRACK_ADDED,\n [sdkTypes.HMSTrackUpdate.TRACK_REMOVED]: HMSNotificationTypes.TRACK_REMOVED,\n [sdkTypes.HMSTrackUpdate.TRACK_MUTED]: HMSNotificationTypes.TRACK_MUTED,\n [sdkTypes.HMSTrackUpdate.TRACK_UNMUTED]: HMSNotificationTypes.TRACK_UNMUTED,\n};\n","import EventEmitter from 'events';\nimport { IHMSNotifications } from '../IHMSNotifications';\nimport { IHMSStore } from '../IHMSStore';\nimport { selectPeerByID, selectTrackByID } from '../selectors';\nimport * as sdkTypes from './sdkTypes';\nimport { PEER_NOTIFICATION_TYPES, TRACK_NOTIFICATION_TYPES } from './common/mapping';\nimport {\n HMSNotification,\n HMSNotificationTypes,\n HMSNotificationSeverity,\n HMSPeer,\n HMSException,\n HMSMessage,\n HMSTrack,\n HMSChangeTrackStateRequest,\n HMSChangeMultiTrackStateRequest,\n HMSLeaveRoomRequest,\n HMSDeviceChangeEvent,\n} from '../schema';\n\nconst HMS_NOTIFICATION_EVENT = 'hmsNotification';\nexport class HMSNotifications implements IHMSNotifications {\n private id: number = 0;\n private eventEmitter: EventEmitter;\n private store: IHMSStore;\n\n constructor(store: IHMSStore) {\n this.store = store;\n this.eventEmitter = new EventEmitter();\n }\n\n onNotification = (cb: (notification: HMSNotification) => void): (() => void) => {\n this.eventEmitter.addListener(HMS_NOTIFICATION_EVENT, cb);\n return () => {\n this.eventEmitter.removeListener(HMS_NOTIFICATION_EVENT, cb);\n };\n };\n\n sendDeviceChange(request: HMSDeviceChangeEvent) {\n const notification = this.createNotification(\n HMSNotificationTypes.DEVICE_CHANGE_UPDATE,\n request,\n request.error ? HMSNotificationSeverity.ERROR : HMSNotificationSeverity.INFO,\n `Selected ${request.type} device - ${request.selection?.label}`,\n );\n this.emitEvent(notification);\n }\n\n sendLeaveRoom(request: HMSLeaveRoomRequest) {\n const notification = this.createNotification(\n request.roomEnded ? HMSNotificationTypes.ROOM_ENDED : HMSNotificationTypes.REMOVED_FROM_ROOM,\n request,\n HMSNotificationSeverity.INFO,\n `${request.roomEnded ? `Room ended` : 'Removed from room'} by ${request.requestedBy.name}`,\n );\n this.emitEvent(notification);\n }\n\n sendPeerList(peers: HMSPeer[]) {\n const notification = this.createNotification(\n HMSNotificationTypes.PEER_LIST,\n peers,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendPeerUpdate(type: sdkTypes.HMSPeerUpdate, peer: HMSPeer | null) {\n const hmsPeer = this.store.getState(selectPeerByID(peer?.id)) || peer;\n const notificationType = PEER_NOTIFICATION_TYPES[type];\n if (notificationType) {\n const notification = this.createNotification(\n notificationType,\n hmsPeer,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n }\n\n sendTrackUpdate(type: sdkTypes.HMSTrackUpdate, trackID: string) {\n const hmsTrack = this.store.getState(selectTrackByID(trackID));\n const notificationType = TRACK_NOTIFICATION_TYPES[type];\n if (notificationType) {\n const notification = this.createNotification(\n notificationType,\n hmsTrack,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n }\n\n sendMessageReceived(message: HMSMessage) {\n const notification = this.createNotification(\n HMSNotificationTypes.NEW_MESSAGE,\n message,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendError(error: HMSException) {\n const notification = this.createNotification(\n HMSNotificationTypes.ERROR,\n error,\n HMSNotificationSeverity.ERROR,\n );\n this.emitEvent(notification);\n }\n\n sendReconnecting(error: HMSException) {\n const notification = this.createNotification(\n HMSNotificationTypes.RECONNECTING,\n error,\n HMSNotificationSeverity.ERROR,\n );\n this.emitEvent(notification);\n }\n\n sendReconnected() {\n const notification = this.createNotification(\n HMSNotificationTypes.RECONNECTED,\n null,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendChangeTrackStateRequest(request: HMSChangeTrackStateRequest) {\n const notification = this.createNotification(\n HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST,\n request,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n sendChangeMultiTrackStateRequest(request: HMSChangeMultiTrackStateRequest) {\n const notification = this.createNotification(\n HMSNotificationTypes.CHANGE_MULTI_TRACK_STATE_REQUEST,\n request,\n HMSNotificationSeverity.INFO,\n );\n this.emitEvent(notification);\n }\n\n private emitEvent(notification: HMSNotification) {\n this.eventEmitter.emit(HMS_NOTIFICATION_EVENT, notification);\n }\n\n private createNotification(\n type: string,\n data?:\n | HMSPeer\n | HMSPeer[]\n | HMSTrack\n | HMSMessage\n | HMSException\n | HMSChangeTrackStateRequest\n | HMSChangeMultiTrackStateRequest\n | HMSLeaveRoomRequest\n | HMSDeviceChangeEvent\n | null,\n severity?: HMSNotificationSeverity,\n message: string = '',\n ): HMSNotification {\n this.id++;\n return {\n id: this.id,\n type,\n message,\n data,\n severity,\n };\n }\n}\n","import produce from 'immer';\nimport create, {\n StateSelector,\n StoreApi,\n SetState,\n StateSliceListener,\n EqualityChecker,\n PartialState,\n State,\n} from 'zustand/vanilla';\nimport shallow from 'zustand/shallow';\nimport { HMSSdk } from '@100mslive/hms-video';\nimport { IHMSActions } from '../IHMSActions';\nimport { HMSSDKActions } from './HMSSDKActions';\nimport { IHMSStore, IHMSStoreReadOnly } from '../IHMSStore';\nimport { createDefaultStoreState, HMSStore } from '../schema';\nimport { HMSNotifications } from './HMSNotifications';\nimport { IHMSNotifications } from '../IHMSNotifications';\nimport { NamedSetState } from './internalTypes';\n\nexport class HMSReactiveStore {\n private readonly actions: IHMSActions;\n private readonly store: IHMSStore;\n private readonly notifications: HMSNotifications;\n private initialTriggerOnSubscribe: boolean;\n\n constructor(hmsStore?: IHMSStore, hmsActions?: IHMSActions, hmsNotifications?: HMSNotifications) {\n if (hmsStore) {\n this.store = hmsStore;\n } else {\n this.store = HMSReactiveStore.createNewHMSStore();\n }\n if (hmsNotifications) {\n this.notifications = hmsNotifications;\n } else {\n this.notifications = new HMSNotifications(this.store);\n }\n if (hmsActions) {\n this.actions = hmsActions;\n } else {\n this.actions = new HMSSDKActions(this.store, new HMSSdk(), this.notifications);\n }\n this.initialTriggerOnSubscribe = false;\n }\n\n /**\n * By default store.subscribe does not call the handler with the current state at time of subscription,\n * this behaviour can be modified by calling this function. What it means is that instead of calling the\n * handler only for changes which happen post subscription we'll also call it exactly once at the time\n * of subscription with the current state. This behaviour is similar to that of BehaviourSubject in rxjs.\n * This will be an irreversible change\n *\n * Note: you don't need this if you're using our react hooks, it takes care of this requirement.\n */\n triggerOnSubscribe(): void {\n if (this.initialTriggerOnSubscribe) {\n // already done\n return;\n }\n HMSReactiveStore.makeStoreTriggerOnSubscribe(this.store);\n this.initialTriggerOnSubscribe = true;\n }\n\n /**\n * A reactive store which has a subscribe method you can use in combination with selectors\n * to subscribe to a subset of the store. The store serves as a single source of truth for\n * all data related to the corresponding HMS Room.\n */\n getStore(): IHMSStoreReadOnly {\n return this.store;\n }\n\n /**\n * Any action which may modify the store or may need to talk to the SDK will happen\n * through the IHMSActions instance returned by this\n */\n getHMSActions(): IHMSActions {\n return this.actions;\n }\n\n /**\n * This return notification handler function to which you can pass your callback to\n * receive notifications like peer joined, peer left, etc. to show in your UI or use\n * for analytics\n */\n getNotifications(): IHMSNotifications {\n return { onNotification: this.notifications.onNotification };\n }\n\n /**\n * @internal\n */\n static createNewHMSStore(): IHMSStore {\n const hmsStore = create<HMSStore>(() => createDefaultStoreState());\n // make set state immutable, by passing functions through immer\n const savedSetState = hmsStore.setState;\n hmsStore.setState = (partial: any) => {\n const nextState = typeof partial === 'function' ? produce(partial) : partial;\n savedSetState(nextState);\n };\n // add option to pass selector to getState\n const prevGetState = hmsStore.getState;\n // eslint-disable-next-line complexity\n hmsStore.getState = <StateSlice>(selector?: StateSelector<HMSStore, StateSlice>) => {\n if (selector) {\n const name = selector.name || 'byIDSelector';\n // @ts-ignore\n if (!window.selectorsCount) {\n // @ts-ignore\n window.selectorsCount = {};\n }\n // @ts-ignore\n window.selectorsCount[name] = (window.selectorsCount[name] || 0) + 1;\n const start = performance.now();\n const updatedState = selector(prevGetState());\n const diff = performance.now() - start;\n // store selectors that take more than 1ms\n if (diff > 1) {\n // @ts-ignore\n window.expensiveSelectors = window.expensiveSelectors || new Map();\n // @ts-ignore\n window.expensiveSelectors.set(name, diff);\n }\n return updatedState;\n }\n return prevGetState();\n };\n HMSReactiveStore.useShallowCheckInSubscribe(hmsStore);\n const namedSetState = HMSReactiveStore.setUpDevtools(hmsStore, 'HMSStore');\n return { ...hmsStore, namedSetState };\n }\n\n /**\n * @internal\n */\n static makeStoreTriggerOnSubscribe(store: IHMSStore) {\n const prevSubscribe = store.subscribe;\n store.subscribe = <StateSlice>(\n listener: StateSliceListener<StateSlice>,\n selector?: StateSelector<HMSStore, StateSlice>,\n equalityFn?: EqualityChecker<StateSlice>,\n ): (() => void) => {\n // initial call, the prev state will always be null for this\n listener(store.getState(selector), (undefined as unknown) as StateSlice);\n // then subscribe\n return prevSubscribe(listener, selector!, equalityFn);\n };\n }\n\n /**\n * use shallow equality check by default for subscribe to optimize for array/object selectors.\n * by default zustand does only reference matching so something like, getPeers for eg. would trigger\n * the corresponding component even if peers didn't actually change, as selectPeers creates a new array everytime.\n * Although the array reference changes, the order of peers and peer objects don't themselves change in this case,\n * and a shallow check avoids that triggering.\n * @private\n */\n private static useShallowCheckInSubscribe(hmsStore: StoreApi<HMSStore>) {\n const prevSubscribe = hmsStore.subscribe;\n hmsStore.subscribe = <StateSlice>(\n listener: StateSliceListener<StateSlice>,\n selector?: StateSelector<HMSStore, StateSlice>,\n equalityFn?: EqualityChecker<StateSlice>,\n ): (() => void) => {\n if (!selector) {\n selector = (store): StateSlice => (store as unknown) as StateSlice;\n }\n equalityFn = equalityFn || shallow;\n return prevSubscribe(listener, selector, equalityFn);\n };\n }\n\n /**\n * @private\n * @privateRemarks\n * sets up redux devtools for the store, so redux extension can be used to visualize the store.\n * zustand's default devtool middleware only enhances the set function, we're here creating another nameSetState in\n * IHMStore which behaves like setState but takes an extra parameter for action name\n * https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Methods.md\n * modified version of zustand's devtools - https://github.com/pmndrs/zustand/blob/v3.5.7/src/middleware.ts#L46\n */\n private static setUpDevtools<T extends State>(\n api: StoreApi<T>,\n prefix: string,\n ): NamedSetState<HMSStore> {\n let extension;\n try {\n extension =\n (window as any).__REDUX_DEVTOOLS_EXTENSION__ ||\n (window as any).top.__REDUX_DEVTOOLS_EXTENSION__;\n } catch {}\n if (!extension) {\n return (fn: any) => {\n api.setState(fn);\n };\n }\n const devtools = extension.connect(HMSReactiveStore.devtoolsOptions(prefix));\n devtools.prefix = prefix ? `${prefix} > ` : '';\n const savedSetState = api.setState;\n api.setState = (fn: any) => {\n savedSetState(fn);\n devtools.send(`${devtools.prefix}setState`, api.getState());\n };\n\n devtools.subscribe(HMSReactiveStore.devtoolsSubscribe(devtools, api, savedSetState));\n\n devtools.send('setUpStore', api.getState());\n\n return (fn: any, action?: string) => {\n savedSetState(fn);\n const actionName = action ? action : `${devtools.prefix}action`;\n devtools.send(actionName, api.getState());\n };\n }\n\n /**\n * https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md\n */\n private static devtoolsOptions(prefix: string) {\n return {\n name: prefix,\n actionsBlacklist: ['audioLevel', 'playlistProgress'], // very high frequency update, pollutes the action history\n };\n }\n\n /**\n * redux devtools allows for time travel debugging where it sends an action to update the store, users can\n * also export and import state in the devtools, listen to the corresponding functions from devtools and take\n * required action.\n * @param devtools - reference to devtools extension object\n * @param api\n * @param savedSetState - setState saved before its modified to update devtools\n * @private\n */\n private static devtoolsSubscribe<T extends State>(\n devtools: any,\n api: StoreApi<T>,\n savedSetState: SetState<T>,\n ) {\n // disabling complexity check instead of refactoring so as to keep the code close to zustand's and make\n // any future update based on upstream changes easier.\n // eslint-disable-next-line complexity\n return (message: any) => {\n if (message.type === 'DISPATCH' && message.state) {\n const ignoreState = ['JUMP_TO_ACTION', 'JUMP_TO_STATE'].includes(message.payload.type);\n if (!ignoreState) {\n // manual dispatch from the extension\n api.setState(JSON.parse(message.state));\n } else {\n // for time travel, no need to add new state changes in devtools\n savedSetState(JSON.parse(message.state));\n }\n } else if (message.type === 'DISPATCH' && message.payload?.type === 'COMMIT') {\n devtools.init(api.getState());\n } else if (message.type === 'DISPATCH' && message.payload?.type === 'IMPORT_STATE') {\n const actions = message.payload.nextLiftedState?.actionsById;\n const computedStates = message.payload.nextLiftedState?.computedStates || [];\n\n computedStates.forEach(({ state }: { state: PartialState<T> }, index: number) => {\n const action = actions[index] || `${devtools.prefix}setState`;\n if (index === 0) {\n devtools.init(state);\n } else {\n savedSetState(state);\n devtools.send(action, api.getState());\n }\n });\n }\n };\n }\n}\n"],"names":["undefined","HMSRoomState","createDefaultStoreState","room","id","isConnected","name","peers","shareableLink","localPeer","hasWaitingRoom","roomState","Disconnected","recording","browser","running","server","rtmp","tracks","playlist","audio","list","selection","hasPrevious","hasNext","progress","volume","currentTime","video","messages","byID","allIDs","speakers","settings","audioInputDeviceId","audioOutputDeviceId","videoInputDeviceId","devices","audioInput","audioOutput","videoInput","roles","roleChangeRequests","errors","HMSMessageType","HMSNotificationSeverity","HMSNotificationTypes","HMSPlaylistType","mergeNewPeersInDraft","draftPeers","newPeers","newHmsTracks","newHmsSDkTracks","peerIDs","union","Object","keys","peerID","oldPeer","newPeer","isEntityUpdated","areArraysEqual","auxiliaryTracks","handleLocalVideoReplaceTrack","assign","isEntityRemoved","isEntityAdded","mergeNewTracksInDraft","draftTracks","newTracks","trackIDs","trackID","oldTrack","newTrack","mergeTrackArrayFields","plugins","layerDefinitions","oldItem","newItem","arr1","arr2","length","i","set","Set","elem","add","Array","from","isLocal","videoTrack","SDKToHMS","convertPeer","sdkPeer","peerId","roleName","role","trackId","audioTrack","map","t","customerUserId","customerDescription","convertTrack","sdkTrack","track","source","type","enabled","displayEnabled","enrichTrack","mediaSettings","getMediaTrackSettings","displaySurface","height","width","deviceID","deviceId","SDKHMSRemoteAudioTrack","getVolume","enrichVideoTrack","enrichPluginsDetails","SDKHMSRemoteVideoTrack","layer","getSimulcastLayer","degraded","getSimulcastDefinitions","SDKHMSLocalVideoTrack","SDKHMSLocalAudioTrack","getPlugins","convertRoom","sdkRoom","convertMessage","sdkMessage","sender","senderName","senderRole","senderUserId","recipientPeer","recipientRoles","time","message","convertRoles","sdkRoles","forEach","convertRoleChangeRequest","req","requestedBy","token","convertException","sdkException","code","action","description","isTerminal","nativeError","timestamp","Date","convertDeviceChangeUpdate","sdkDeviceChangeEvent","convertedData","error","convertPlaylist","playlistManager","audioPlaylist","getConvertedPlaylistType","videoPlaylist","convertedPlaylist","currentSelection","getCurrentSelection","getCurrentProgress","isPlaying","getList","currentIndex","getCurrentIndex","playlistItem","isSelected","url","selected","playing","getCurrentTime","convertRecordingRTMPState","getPeerTracksByCondition","peer","trackCheckFn","isScreenShare","isAudio","isVideo","isAudioPlaylist","isVideoPlaylist","isDegraded","Boolean","isTrackEnabled","store","isTrackDisplayEnabled","selectRoom","selectPeersMap","selectMessagesMap","selectMessageIDsInOrder","selectTracksMap","selectLocalMediaSettings","selectDevices","selectSpeakers","selectIsConnectedToRoom","createSelector","selectPeerCount","selectPeers","storePeers","selectTracks","storeTracks","values","selectLocalPeer","selectLocalPeerID","selectLocalAudioTrackID","selectLocalVideoTrackID","selectLocalAuxiliaryTrackIDs","selectLocalTrackIDs","audioTrackID","videoTrackID","auxiliaryTrackIDs","unshift","selectRemotePeers","filter","p","selectDominantSpeaker","peersMap","speakersInOrder","entries","sort","s1","s2","s1Level","audioLevel","s2Level","selectIsLocalAudioEnabled","selectIsLocalVideoEnabled","selectIsLocalVideoDisplayEnabled","selectIsLocalScreenShared","tracksMap","selectPeerScreenSharing","screensharePeer","selectIsSomeoneScreenSharing","selectPeerSharingAudio","selectPeersScreenSharing","videoPeers","audioPeers","push","concat","selectPeerSharingVideoPlaylist","selectDegradedTracks","selectHMSMessagesCount","messageIDs","selectUnreadHMSMessagesCount","m","read","selectHMSMessages","msgIDs","msgMap","msgId","selectRoomState","selectIsInPreview","Preview","selectRoomStarted","selectRolesMap","selectAvailableRoleNames","rolesMap","selectLocalPeerRole","selectIsAllowedToSubscribe","subscribeParams","subscribeToRoles","selectPermissions","permissions","selectRecordingState","selectRTMPState","selectPlaylistMap","selectPlaylistSelection","selectPlaylistProgress","selectPlaylistCurrentTime","selectPlaylistVolume","selectPlaylist","storePlaylist","selectPlaylistSelectedItem","selectAudioPlaylist","selectedItem","selectVideoPlaylist","HMS_STORE_TAG","HMSLogger","v","tag","data","log","HMSLogLevel","VERBOSE","d","DEBUG","INFO","w","WARN","e","ERROR","mark","TIME","timeEnd","TIMEEND","cleanUp","performance","clearMarks","clearMeasures","level","valueOf","console","debug","info","warn","entry","measure","duration","byIDCurry","selector","selectPeerID","_store","selectTrackID","selectRoleName","selectPeerByIDBare","selectTrackByIDBare","selectPeerByID","selectPeerNameByID","selectTrackByID","selectVideoTrackByPeerID","selectAudioTrackByPeerID","selectCameraStreamByPeerID","selectAuxiliaryTracksByPeerID","selectSpeakerByTrackID","selectTrackAudioByID","speaker","selectSpeakerByPeerID","peerAudioTrack","selectPeerAudioByID","selectAuxiliaryAudioByPeerID","find","selectVideoPlaylistVideoTrackByPeerID","selectVideoPlaylistAudioTrackByPeerID","selectAudioPlaylistTrackByPeerID","selectScreenSharesByPeerId","selectScreenShareByPeerID","screenshare","selectScreenShareAudioByPeerID","selectIsPeerAudioEnabled","selectIsPeerVideoEnabled","selectIsAudioLocallyMuted","selectIsLocallyMutedByPeerID","selectIsScreenShareLocallyMutedByPeerID","selectAudioTrackVolume","selectAudioVolumeByPeerID","selectScreenshareAudioVolumeByPeerID","selectSimulcastLayerByTrack","selectMessagesByPeerIDInternal","localPeerID","includes","selectMessagesByRoleInternal","selectBroadcastMessages","selectUnreadMessageCountByRole","selectUnreadMessageCountByPeerID","selectBroadcastMessagesUnreadCount","selectMessagesByPeerID","selectMessagesByRole","selectMessagesUnreadCountByRole","selectMessagesUnreadCountByPeerID","selectPeersWithAudioStatus","participants","isAudioEnabled","selectRoleChangeStoreRequest","selectRoleChangeRequest","request","selectIsAllowedToPublish","screen","publishParams","allowed","selectRoleByRoleName","selectLocalVideoPlugins","selectLocalAudioPlugins","selectIsLocalVideoPluginPresent","pluginName","selectIsLocalAudioPluginPresent","isRemoteTrack","HMSRemoteAudioTrack","HMSRemoteVideoTrack","HMSPlaylist","syncPlaylistState","play","setEnabled","pause","getState","playNext","playPrevious","seek","seekValue","seekTo","setVolume","setList","stop","HMSSDKActions","sdk","notificationManager","setState","draftStore","getPlaylistManager","draftPeer","hmsPeer","hmsTrack","updateTracksInPeer","logPossibleInconsistency","hmsSDKTracks","fn","namedSetState","hmsNotifications","unblockAudio","getAudioOutput","unblockAutoplay","value","setTrackVolume","syncRoomState","setAudioOutputDevice","deviceInfo","setDevice","setPreferredLayer","preferLayer","updateVideoLayer","preview","config","isRoomJoinCalled","Connecting","sdkPreviewWithListeners","join","sdkJoinWithListeners","err","leave","hasRoomStarted","then","resetState","setScreenShareEnabled","audioOnly","startScreenShare","stopScreenShare","addTrack","removeTrack","setLocalAudioEnabled","setEnabledTrack","setLocalVideoEnabled","alreadyInSameState","setEnabledSDKTrack","sendError","sdkTypes","TRACK_UNMUTED","TRACK_MUTED","sendTrackUpdate","setAudioSettings","setSDKLocalAudioTrackSettings","setVideoSettings","setSDKLocalVideoTrackSettings","sendMessage","sendBroadcastMessage","updateMessageInStore","sendGroupMessage","storeRoles","hmsRoles","sendDirectMessage","hmsSDKPeers","messageInput","Error","JSON","stringify","hmsMessage","onHMSMessage","setMessageRead","readStatus","messageId","attachVideo","videoElement","localAndVideoUnmuting","Promise","resolve","unsub","subscribe","attachVideoInternal","detachVideo","removeSink","addPluginToVideoTrack","plugin","pluginFrameRate","addRemoveVideoPlugin","addPluginToAudioTrack","addRemoveAudioPlugin","removePluginFromVideoTrack","removePluginFromAudioTrack","changeRole","forPeerId","toRole","force","acceptChangeRole","sdkRequest","removeRoleChangeRequest","rejectChangeRole","endRoom","lock","reason","removePeer","startRTMPOrRecording","params","stopRTMPAndRecording","setRemoteTrackEnabled","changeTrackState","isArray","setRemoteTracksEnabled","changeMultiTrackState","setLogLevel","onJoin","bind","onRoomUpdate","onPeerUpdate","onTrackUpdate","onMessageReceived","onError","onReconnected","onReconnecting","onRoleChangeRequest","onRoleUpdate","onDeviceChange","onChangeTrackStateRequest","onChangeMultiTrackStateRequest","onRemovedFromRoom","addAudioListener","onAudioLevelUpdate","sendLeaveRoom","roomEnded","event","getMediaSettings","notification","sendDeviceChange","onPreview","isScreenShared","addSink","newHmsPeers","newHmsPeerIDs","newMediaSettings","sdkPeers","getPeers","sdkTracks","getRecordingState","getRTMPState","getRoles","Connected","onProgress","setProgress","onNewTrackStart","item","onPlaylistEnded","BECAME_DOMINANT_SPEAKER","RESIGNED_DOMINANT_SPEAKER","hmsPeers","sendPeerList","peerUpdateInternal","TRACK_REMOVED","handleTrackRemove","actionName","TRACK_ADDED","syncRemoteTrackState","sendMessageReceived","String","sdkSpeakers","trackIDAudioLevelMap","sdkSpeaker","speakerEntries","storeTrackID","getStoreLocalTrackIDfromSDKTrack","sendChangeTrackStateRequest","sendChangeMultiTrackStateRequest","sendReconnected","sdkError","sendReconnecting","Reconnecting","Failed","numExistingErrors","draft","isSameStoreSDKTrack","auxiliaryIndex","indexOf","splice","setSettings","getDevice","SDKHMSAudioTrack","actuallyEnabled","inconsistency","addPlugin","removePlugin","sdkTrackID","toRemove","index","findIndex","PEER_JOINED","PEER_LEFT","sendPeerUpdate","PEER_NOTIFICATION_TYPES","ROLE_UPDATED","AUDIO_TOGGLED","VIDEO_TOGGLED","TRACK_NOTIFICATION_TYPES","HMS_NOTIFICATION_EVENT","HMSNotifications","cb","eventEmitter","addListener","removeListener","EventEmitter","createNotification","DEVICE_CHANGE_UPDATE","label","emitEvent","ROOM_ENDED","REMOVED_FROM_ROOM","PEER_LIST","notificationType","NEW_MESSAGE","RECONNECTING","RECONNECTED","CHANGE_TRACK_STATE_REQUEST","CHANGE_MULTI_TRACK_STATE_REQUEST","emit","severity","HMSReactiveStore","hmsStore","hmsActions","createNewHMSStore","notifications","actions","HMSSdk","initialTriggerOnSubscribe","triggerOnSubscribe","makeStoreTriggerOnSubscribe","getStore","getHMSActions","getNotifications","onNotification","create","savedSetState","partial","nextState","produce","prevGetState","window","selectorsCount","start","now","updatedState","diff","expensiveSelectors","Map","useShallowCheckInSubscribe","setUpDevtools","prevSubscribe","listener","equalityFn","shallow","api","prefix","extension","__REDUX_DEVTOOLS_EXTENSION__","top","devtools","connect","devtoolsOptions","send","devtoolsSubscribe","actionsBlacklist","state","ignoreState","payload","parse","init","nextLiftedState","actionsById","computedStates"],"mappings":"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"}