UNPKG

@observertc/client-monitor-js

Version:

ObserveRTC Client Integration Javascript Library

1 lines 1.46 kB
import{createLogger as e}from"../utils/logger";import{ClientMetaTypes as a}from"../schema/ClientMetaTypes";const t=e("utils");export function watchMediaDevices(e){let i;if(void 0!==navigator)i=navigator;else{if(void 0===window||void 0===window.navigator)return t.error("Cannot integrate navigator.mediaDevices, because navigator is not available");i=window.navigator}const n=i.mediaDevices;if(!n)return t.error("Cannot integrate navigator.mediaDevices, because navigator.mediaDevices is not available");if(void 0===n.getUserMedia||"function"!=typeof n.getUserMedia)return t.error("Cannot integrate navigator.mediaDevices.getUserMedia, because getUserMedia is not a function");const r=n,o=r.getUserMedia.bind(r);r.getUserMedia=async t=>{try{return await o(t)}catch(t){throw e.addIssue({type:a.USER_MEDIA_ERROR,payload:{error:`${t}`}}),t}};try{const t=r.getSupportedConstraints();e.addMetaData({type:a.MEDIA_DEVICES_SUPPORTED_CONSTRAINTS,payload:{...t}})}catch(e){t.warn("Cannot get supported constraints",e)}const s=new Set,d=async()=>{try{const t=await r.enumerateDevices();for(const i of t){const t=`${i.groupId}-${i.deviceId}-${i.kind}-${i.label}`;s.has(t)||(e.addMetaData({type:a.MEDIA_DEVICE,payload:i.toJSON()}),s.add(t))}}catch(e){t.error("Cannot enumerate media devices",e)}};e.once("close",(()=>{r.getUserMedia=o,r.removeEventListener("devicechange",d)})),r.addEventListener("devicechange",d),d().catch((e=>{t.warn("Cannot enumerate media devices",e)}))}