var Promise = require('bluebird/js/release/bluebird'); var DetectRTC = require('detectrtc'); /** * Detection module * @class * @classdesc Detect * @return {Promise<ListDetections>} * @example * usecases.detect() * .then((detections) => { * console.log(detections.detectBrowserCompatibility); // true * }) */ var detect = function() { /** * Returns a detailed DetectRTC object with local browser features * @return {object} DetectRTC object * @example * detections.getDetectionInfo(); */ var getDetectionInfo = function() { return DetectRTC; }; /** * Detects if the browser is or not compatible with VideoRTC.js * @param {object} browsers * @return {boolean} * @example * detections.detectBrowserCompatibility({chrome: true, firefox: true, opera: false, safari: false}); */ var detectBrowserCompatibility = function(obj) { var browsers = obj || { chrome: true, firefox: true, opera: false, safari: false }; if((!DetectRTC.isWebRTCSupported)) return false; else if(DetectRTC.browser.isChrome && browsers.chrome === true) return true; else if(DetectRTC.browser.isFirefox && browsers.firefox === true) return true; else if(DetectRTC.browser.isOpera && browsers.opera === true) return true; else if(DetectRTC.browser.isSafari && browsers.safari === true) return true; else return false; }; /** * Detects information about the local cameras connected * @return {object} {hasCamera: Boolean, videoDevices: Array, domainCameraPermissions: Boolean} * @example * detections.detectCamera(); // {hasCamera: true, videoDevices: [], domainCameraPermissions: true} */ var detectCamera = function() { return { hasCamera: DetectRTC.hasWebcam, videoDevices: DetectRTC.videoInputDevices, domainCameraPermissions: DetectRTC.isWebsiteHasWebcamPermissions }; }; /** * Detects information about the local microphones connected * @return {object} {hasMicrophone: Boolean, audioInputDevices: Array, domainMicrophonePermissions: Boolean} * @example * detections.detectMicrophone(); // {hasMicrophone: true, audioInputDevices: [], domainMicrophonePermissions: true} */ var detectMicrophone = function() { return { hasMicrophone: DetectRTC.hasMicrophone, audioInputDevices: DetectRTC.audioInputDevices, domainMicrophonePermissions: DetectRTC.isWebsiteHasMicrophonePermissions }; }; /** * Detects information about the speakers connected * @return {object} {hasSpeakers: Boolean, audioOutputDevices: Array} * @example * detections.detectSpeakers(); // {hasSpeakers: true, audioOutputDevices: []} */ var detectSpeakers = function() { return { hasSpeakers: DetectRTC.hasSpeakers, audioOutputDevices: DetectRTC.audioOutputDevices }; }; return new Promise(function (resolve) { DetectRTC.load(function() { resolve({ getDetectionInfo: getDetectionInfo, detectBrowserCompatibility: detectBrowserCompatibility, detectCamera: detectCamera, detectMicrophone: detectMicrophone, detectSpeakers: detectSpeakers }) }); }); }; exports.detect = detect;