interface Device {
  deviceId: string;
  groupId: string;
  id: string;
  isCustomLabel?: boolean;
  kind: string;
  label: string;
}

namespace DetectRTC {
  export function load(callback: () => void): void;
  export const version: string;
  export const osName: string;
  export const osVersion: string;

  export const hasWebcam: boolean;
  export const hasMicrophone: boolean; // (has microphone device!)
  export const hasSpeakers: boolean; // (has speakers!)

  export const isApplyConstraintsSupported: boolean;
  export const isAudioContextSupported: boolean;
  export const isCanvasSupportsStreamCapturing: boolean;
  export const isCreateMediaStreamSourceSupported: boolean;
  export const isGetUserMediaSupported: boolean;
  export const isMobileDevice: boolean;
  export const isMultiMonitorScreenCapturingSupported: boolean;
  export const isORTCSupported: boolean;
  export const isPromisesSupported: boolean;
  export const isRTPSenderReplaceTracksSupported: boolean;
  export const isRemoteStreamProcessingSupported: boolean;
  export const isRtpDataChannelsSupported: boolean;
  export const isScreenCapturingSupported: boolean; // Chrome, Firefox, Opera, Edge and Android
  export const isSctpDataChannelsSupported: boolean;
  export const isSetSinkIdSupported: boolean;
  export const isVideoSupportsStreamCapturing: boolean;
  export const isWebRTCSupported: boolean;
  export const isWebSocketsBlocked: boolean;
  export const isWebSocketsSupported: boolean;

  export const isWebsiteHasMicrophonePermissions: boolean; // getUserMedia allowed for HTTPs domain in Chrome?
  export const isWebsiteHasWebcamPermissions: boolean; // getUserMedia allowed for HTTPs domain in Chrome?

  export const isDesktopCapturingSupported: boolean;

  export function checkWebSocketsSupport(callback: () => void);

  export const audioInputDevices: Device[]; // microphones
  export const audioOutputDevices: Device[]; // speakers
  export const videoInputDevices: Device[]; // cameras

  export const displayAspectRatio: string;
  export const displayResolution: string;

  export const browser: {
    name: "Edge" | "Chrome" | "Firefox" | string;
    version: string | number;
    fullVersion: string;
    isChrome?: boolean;
    isFirefox?: boolean;
    isOpera?: boolean;
    isIE?: boolean;
    isSafari?: boolean;
    isEdge?: boolean;

    isPrivateBrowsing?: boolean; // incognito or private modes
  };

  export function DetectLocalIPAddress(
    callback: (localIpAddress: string) => void
  );

  export const MediaDevices: Device[];
  export const MediaStream: string[];
  export const MediaStreamTrack: string[];
  export const RTCPeerConnection: string[];
}
export = DetectRTC;