UNPKG

@4players/odin

Version:

A cross-platform SDK enabling developers to integrate real-time VoIP chat technology into their projects

104 lines (103 loc) 4.14 kB
"use strict"; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var _LocalPeer_volume; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalPeer = void 0; const index_1 = require("./index"); /** * Represents the local peer connected to a room. This class extends the base Peer class and includes * functionality specific to the local peer, such as adjusting audio input volumes and managing user data. */ class LocalPeer extends index_1.Peer { /** * Gets the current volume of the LocalPeer. * * @return {CaptureVolume} The current volume. */ get volume() { return __classPrivateFieldGet(this, _LocalPeer_volume, "f"); } /** * Determines if any of the audio inputs are currently active. * * @return {boolean} True if at least one audio input is active, otherwise false. */ get isActive() { return this.audioInputs.some((input) => input.isActive); } /** * Retrieves the highest power level among the audio inputs. * * @return {number} The highest power level detected across all audio inputs. */ get powerLevel() { let highestPowerLevel = 0; for (const audioInput of this.audioInputs) { if (audioInput.powerLevel > highestPowerLevel) { highestPowerLevel = audioInput.powerLevel; } } return highestPowerLevel; } /** * Retrieves the list of AudioInput devices associated with this Peer. * * @return {AudioInput[]} An array of AudioInput objects. Returns an empty array if the instance is remote. */ get audioInputs() { return this.room.audioInputs; } /** * Set updated user data for the peer. */ set data(data) { this.room.userData = data; } /** * The arbitrary user data of the peer. * * @return {Uint8Array} The appropriate Uint8Array data based on the context. */ get data() { return this.room.userData; } constructor(_peerData, room) { super(_peerData, room); this._peerData = _peerData; this.room = room; this.isRemote = false; _LocalPeer_volume.set(this, 1); } /** * Sets the volume for all associated Medias of this Peer. * * @param {CaptureVolume} value - The new volume level to set. * @return {Promise<void>} A promise that resolves when the volume is set for all medias. */ async setVolume(value) { __classPrivateFieldSet(this, _LocalPeer_volume, value, "f"); for (const media of this.room.audioInputs) { await media.setVolume(value); } } /** * Updates the current user's data by flushing it to the associated room. * * @return {Promise<void>} Resolves when the user data has been successfully updated, or rejects with an error if the user is a remote peer or if the operation encounters an issue. */ async update() { await this.room.flushUserData(); } } exports.LocalPeer = LocalPeer; _LocalPeer_volume = new WeakMap();