@ezuikit/utils-tools 2.0.8 → 2.0.9
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.
- package/dist/index.js +3 -3
- package/dist/index.umd.js +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* @ezuikit/utils-tools v2.0.
|
|
2
|
+
* @ezuikit/utils-tools v2.0.9
|
|
3
3
|
* tools utils
|
|
4
|
-
* Copyright (c) 2026-11-
|
|
4
|
+
* Copyright (c) 2026-11-03 Ezviz-OpenBiz
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*/
|
|
7
|
-
"use strict";function isHttp(url){return/^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1])}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","")}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.streamTypeIn=pathnames[2].includes(".hd.")?1:2,obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file&&["live","playback","cloudplayback","download"].includes(file)&&u.search.includes("dev=")&&u.search.includes("stream=")){var deviceSerial=u.searchParams.get("dev"),channelNo=u.searchParams.get("chn")||"1",sessionToken=u.searchParams.get("ssn"),stream=u.searchParams.get("stream"),streamTypeIn=Number(stream);if(!("https:"===u.protocol&&deviceSerial&&channelNo&&sessionToken&&streamTypeIn))return{};var searchParams={};u.searchParams.forEach(function(value,key){searchParams[key]=value}),obj.protocol=u.protocol,obj.search=u.search,obj.searchParams=searchParams,obj.pathname=u.pathname,obj.origin=u.origin,obj.href=url,obj.hostname=u.host,obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,obj.streamTypeIn=streamTypeIn;var validateCode=u.searchParams.get("code");return validateCode&&(obj.validateCode=validateCode),"live"===file?(obj.type="live",obj.definition=1===streamTypeIn?"hd":"sd"):"playback"===file?(obj.type="rec",obj.recType=""):"cloudplayback"===file?(obj.type="rec",obj.recType="cloud"):obj.type="download",obj}if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial1=m[1],channelNo1=m[2],quality=m[3];return obj.deviceSerial=deviceSerial1,obj.channelNo=channelNo1,obj.streamTypeIn=+quality,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return{}}function isEzvizUrl(url){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^ezopen:\/\//.test(path)||/^http[s]?:\/\//.test(path)&&/\/openlive\/|\/openpb\//.test(path)&&/[\w:\d]+_\d+_\d+\.(flv|m3u8)$/.test(path)||/\/(playback|cloudplayback|live)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce(function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)},0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return(it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(!o)return;if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return"year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else{if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"")}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return(date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn)}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return/^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return"second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();function getNavigatorLike(){if("undefined"!=typeof navigator)return navigator}function getWindowLike(){if("undefined"!=typeof window)return window}function detectSecureContext(){var win=getWindowLike();if("boolean"==typeof(null==win?void 0:win.isSecureContext))return win.isSecureContext;if("undefined"==typeof location)return!1;if("https:"===location.protocol||"file:"===location.protocol)return!0;var hostname=location.hostname||"";return"localhost"===hostname||/\.localhost$/.test(hostname)||"127.0.0.1"===hostname||"[::1]"===hostname||"::1"===hostname}function withTimeout(promise,timeout){return timeout>0?new Promise(function(resolve,reject){var settled=!1,timer=setTimeout(function(){settled||(settled=!0,reject(new Error("[microphone] detect timeout")))},timeout),finish=function(run){settled||(settled=!0,clearTimeout(timer),run())};promise.then(function(value){return finish(function(){return resolve(value)})},function(error){return finish(function(){return reject(error)})})}):promise}function getMicrophoneCapabilities(){var _nav_permissions,nav=getNavigatorLike(),win=getWindowLike(),mediaDevices=null==nav?void 0:nav.mediaDevices;return{secureContext:detectSecureContext(),mediaDevices:!!mediaDevices,getUserMedia:"function"==typeof(null==mediaDevices?void 0:mediaDevices.getUserMedia),legacyGetUserMedia:"function"==typeof(null==nav?void 0:nav.getUserMedia)||"function"==typeof(null==nav?void 0:nav.webkitGetUserMedia)||"function"==typeof(null==nav?void 0:nav.mozGetUserMedia)||"function"==typeof(null==nav?void 0:nav.msGetUserMedia),enumerateDevices:"function"==typeof(null==mediaDevices?void 0:mediaDevices.enumerateDevices),permissionsQuery:"function"==typeof(null==nav||null==(_nav_permissions=nav.permissions)?void 0:_nav_permissions.query),mediaRecorder:"function"==typeof(null==win?void 0:win.MediaRecorder),audioContext:"function"==typeof(null==win?void 0:win.AudioContext)||"function"==typeof(null==win?void 0:win.webkitAudioContext)}}function resolveCapabilityReason(capabilities){return"undefined"==typeof navigator?"unsupported-environment":capabilities.secureContext?!1===function(){var _doc_permissionsPolicy;if("undefined"!=typeof document){var doc=document,policy=null!=(_doc_permissionsPolicy=doc.permissionsPolicy)?_doc_permissionsPolicy:doc.featurePolicy;if("function"==typeof(null==policy?void 0:policy.allowsFeature))try{return policy.allowsFeature("microphone")}catch(unused){return}}}()?"permissions-policy":capabilities.getUserMedia||capabilities.legacyGetUserMedia?"ok":"no-getusermedia":"insecure-context"}exports.DateTime=DateTime,exports.addVc=function(url,codecs){void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter(function(item){return!/^vc=\d?/.test(item)}).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},exports.checkMicrophoneSupport=function(options){void 0===options&&(options={});var _options_checkDevice=options.checkDevice,checkDevice=void 0===_options_checkDevice||_options_checkDevice,_options_checkPermission=options.checkPermission,checkPermission=void 0===_options_checkPermission||_options_checkPermission,_options_timeout=options.timeout,timeout=void 0===_options_timeout?2e3:_options_timeout,capabilities=getMicrophoneCapabilities(),capabilityReason=resolveCapabilityReason(capabilities);if("ok"!==capabilityReason)return Promise.resolve({supported:!1,available:!1,reason:capabilityReason,permission:"unknown",device:"unknown",willPrompt:!1,capabilities:capabilities});var permissionTask=checkPermission?function(timeout){var _getNavigatorLike,permissions=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.permissions;if(!permissions||"function"!=typeof permissions.query)return Promise.resolve("unknown");try{return withTimeout(permissions.query({name:"microphone"}),timeout).then(function(status){return"granted"===(state=status.state)||"denied"===state||"prompt"===state?state:"unknown";var state},function(){return"unknown"})}catch(unused){return Promise.resolve("unknown")}}(timeout):Promise.resolve("unknown"),deviceTask=checkDevice?function(timeout){var _getNavigatorLike,pending,mediaDevices=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.mediaDevices;if(!mediaDevices||"function"!=typeof mediaDevices.enumerateDevices)return Promise.resolve("unknown");try{pending=mediaDevices.enumerateDevices()}catch(unused){return Promise.resolve("unknown")}return withTimeout(pending,timeout).then(function(devices){return Array.isArray(devices)&&0!==devices.length?devices.some(function(device){return"audioinput"===(null==device?void 0:device.kind)})?"present":"absent":"unknown"},function(){return"unknown"})}(timeout):Promise.resolve("unknown");return Promise.all([permissionTask,deviceTask]).then(function(param){var permission=param[0],device=param[1],reason="ok";return"denied"===permission?reason="permission-denied":"absent"===device&&(reason="no-device"),{supported:!0,available:"ok"===reason,reason:reason,permission:permission,device:device,willPrompt:"granted"!==permission&&"denied"!==permission,capabilities:capabilities}})},exports.getMicrophoneCapabilities=getMicrophoneCapabilities,exports.getQuery=getQuery,exports.getQueryVC=getQueryVC,exports.getStaticPath=function(path,base){void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return"";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},exports.isEmpty=function(param){return void 0===param||""===param||null===param},exports.isEzvizLiveUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openlive/")||/^ezopen:\/\//.test(path)&&/\.live$/.test(path)||/\/live$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizPlaybackUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openpb/")||/^ezopen:\/\//.test(path)&&/\.rec$/.test(path)||/\/(playback|cloudplayback)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizUrl=isEzvizUrl,exports.isHttp=isHttp,exports.isMicrophoneSupported=function(){return"ok"===resolveCapabilityReason(getMicrophoneCapabilities())},exports.isMobile=function(agent){var _ref,_navigator,_navigator1,_navigator2,_window;return/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_ref=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_ref:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},exports.isRealMobile=function(agent){var _ref,_navigator,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return!1;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return/android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},exports.objectIsNull=function(obj){try{return"{}"===JSON.stringify(obj)}catch(error){return!1}},exports.parseEzopenUrl=parseEzopenUrl,exports.pick=function(obj,keys){return Object.entries(obj).reduce(function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc},{})},exports.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce(function(acc,param){var key=param[0],value=param[1];return""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"},"?").replace(/&$/,"")}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search};
|
|
7
|
+
"use strict";function isHttp(url){return/^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1])}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","")}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.streamTypeIn=pathnames[2].includes(".hd.")?1:2,obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file&&["live","playback","cloudplayback","download"].includes(file)&&u.search.includes("dev=")&&u.search.includes("stream=")){var deviceSerial=u.searchParams.get("dev"),channelNo=u.searchParams.get("chn")||"1",sessionToken=u.searchParams.get("ssn"),stream=u.searchParams.get("stream"),streamTypeIn=Number(stream);if(!("https:"===u.protocol&&deviceSerial&&channelNo&&sessionToken&&streamTypeIn))return{};var searchParams={};u.searchParams.forEach(function(value,key){searchParams[key]=value}),obj.protocol=u.protocol,obj.search=u.search,obj.searchParams=searchParams,obj.pathname=u.pathname,obj.origin=u.origin,obj.href=url,obj.hostname=u.host,obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,obj.streamTypeIn=streamTypeIn;var validateCode=u.searchParams.get("code");return validateCode&&(obj.validateCode=validateCode),"live"===file?(obj.type="live",obj.definition=1===streamTypeIn?"hd":"sd"):"playback"===file?(obj.type="rec",obj.recType=""):"cloudplayback"===file?(obj.type="rec",obj.recType="cloud"):obj.type="download",obj}if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial1=m[1],channelNo1=m[2],quality=m[3];return obj.deviceSerial=deviceSerial1,obj.channelNo=channelNo1,obj.streamTypeIn=+quality,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return{}}function isEzvizUrl(url){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";if(/^http[s]?:\/\//.test(path)&&/\/openlive\/|\/openpb\//.test(path)&&(/\.flv$/i.test(path)||/\.m3u8$/i.test(path)||/_\d+$/.test(path))){var newPath=path.replace(/\.flv|\.m3u8/gi,"");if(/_\d+_\d+$/.test(newPath))return!0}return/^ezopen:\/\//.test(path)||/\/(playback|cloudplayback|live)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce(function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)},0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return(it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(!o)return;if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return"year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else{if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"")}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return(date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn)}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return/^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return"second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();function getNavigatorLike(){if("undefined"!=typeof navigator)return navigator}function getWindowLike(){if("undefined"!=typeof window)return window}function detectSecureContext(){var win=getWindowLike();if("boolean"==typeof(null==win?void 0:win.isSecureContext))return win.isSecureContext;if("undefined"==typeof location)return!1;if("https:"===location.protocol||"file:"===location.protocol)return!0;var hostname=location.hostname||"";return"localhost"===hostname||/\.localhost$/.test(hostname)||"127.0.0.1"===hostname||"[::1]"===hostname||"::1"===hostname}function withTimeout(promise,timeout){return timeout>0?new Promise(function(resolve,reject){var settled=!1,timer=setTimeout(function(){settled||(settled=!0,reject(new Error("[microphone] detect timeout")))},timeout),finish=function(run){settled||(settled=!0,clearTimeout(timer),run())};promise.then(function(value){return finish(function(){return resolve(value)})},function(error){return finish(function(){return reject(error)})})}):promise}function getMicrophoneCapabilities(){var _nav_permissions,nav=getNavigatorLike(),win=getWindowLike(),mediaDevices=null==nav?void 0:nav.mediaDevices;return{secureContext:detectSecureContext(),mediaDevices:!!mediaDevices,getUserMedia:"function"==typeof(null==mediaDevices?void 0:mediaDevices.getUserMedia),legacyGetUserMedia:"function"==typeof(null==nav?void 0:nav.getUserMedia)||"function"==typeof(null==nav?void 0:nav.webkitGetUserMedia)||"function"==typeof(null==nav?void 0:nav.mozGetUserMedia)||"function"==typeof(null==nav?void 0:nav.msGetUserMedia),enumerateDevices:"function"==typeof(null==mediaDevices?void 0:mediaDevices.enumerateDevices),permissionsQuery:"function"==typeof(null==nav||null==(_nav_permissions=nav.permissions)?void 0:_nav_permissions.query),mediaRecorder:"function"==typeof(null==win?void 0:win.MediaRecorder),audioContext:"function"==typeof(null==win?void 0:win.AudioContext)||"function"==typeof(null==win?void 0:win.webkitAudioContext)}}function resolveCapabilityReason(capabilities){return"undefined"==typeof navigator?"unsupported-environment":capabilities.secureContext?!1===function(){var _doc_permissionsPolicy;if("undefined"!=typeof document){var doc=document,policy=null!=(_doc_permissionsPolicy=doc.permissionsPolicy)?_doc_permissionsPolicy:doc.featurePolicy;if("function"==typeof(null==policy?void 0:policy.allowsFeature))try{return policy.allowsFeature("microphone")}catch(unused){return}}}()?"permissions-policy":capabilities.getUserMedia||capabilities.legacyGetUserMedia?"ok":"no-getusermedia":"insecure-context"}exports.DateTime=DateTime,exports.addVc=function(url,codecs){void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter(function(item){return!/^vc=\d?/.test(item)}).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},exports.checkMicrophoneSupport=function(options){void 0===options&&(options={});var _options_checkDevice=options.checkDevice,checkDevice=void 0===_options_checkDevice||_options_checkDevice,_options_checkPermission=options.checkPermission,checkPermission=void 0===_options_checkPermission||_options_checkPermission,_options_timeout=options.timeout,timeout=void 0===_options_timeout?2e3:_options_timeout,capabilities=getMicrophoneCapabilities(),capabilityReason=resolveCapabilityReason(capabilities);if("ok"!==capabilityReason)return Promise.resolve({supported:!1,available:!1,reason:capabilityReason,permission:"unknown",device:"unknown",willPrompt:!1,capabilities:capabilities});var permissionTask=checkPermission?function(timeout){var _getNavigatorLike,permissions=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.permissions;if(!permissions||"function"!=typeof permissions.query)return Promise.resolve("unknown");try{return withTimeout(permissions.query({name:"microphone"}),timeout).then(function(status){return"granted"===(state=status.state)||"denied"===state||"prompt"===state?state:"unknown";var state},function(){return"unknown"})}catch(unused){return Promise.resolve("unknown")}}(timeout):Promise.resolve("unknown"),deviceTask=checkDevice?function(timeout){var _getNavigatorLike,pending,mediaDevices=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.mediaDevices;if(!mediaDevices||"function"!=typeof mediaDevices.enumerateDevices)return Promise.resolve("unknown");try{pending=mediaDevices.enumerateDevices()}catch(unused){return Promise.resolve("unknown")}return withTimeout(pending,timeout).then(function(devices){return Array.isArray(devices)&&0!==devices.length?devices.some(function(device){return"audioinput"===(null==device?void 0:device.kind)})?"present":"absent":"unknown"},function(){return"unknown"})}(timeout):Promise.resolve("unknown");return Promise.all([permissionTask,deviceTask]).then(function(param){var permission=param[0],device=param[1],reason="ok";return"denied"===permission?reason="permission-denied":"absent"===device&&(reason="no-device"),{supported:!0,available:"ok"===reason,reason:reason,permission:permission,device:device,willPrompt:"granted"!==permission&&"denied"!==permission,capabilities:capabilities}})},exports.getMicrophoneCapabilities=getMicrophoneCapabilities,exports.getQuery=getQuery,exports.getQueryVC=getQueryVC,exports.getStaticPath=function(path,base){void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return"";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},exports.isEmpty=function(param){return void 0===param||""===param||null===param},exports.isEzvizLiveUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openlive/")||/^ezopen:\/\//.test(path)&&/\.live$/.test(path)||/\/live$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizPlaybackUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openpb/")||/^ezopen:\/\//.test(path)&&/\.rec$/.test(path)||/\/(playback|cloudplayback)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizUrl=isEzvizUrl,exports.isHttp=isHttp,exports.isMicrophoneSupported=function(){return"ok"===resolveCapabilityReason(getMicrophoneCapabilities())},exports.isMobile=function(agent){var _ref,_navigator,_navigator1,_navigator2,_window;return/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_ref=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_ref:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},exports.isRealMobile=function(agent){var _ref,_navigator,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return!1;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return/android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},exports.objectIsNull=function(obj){try{return"{}"===JSON.stringify(obj)}catch(error){return!1}},exports.parseEzopenUrl=parseEzopenUrl,exports.pick=function(obj,keys){return Object.entries(obj).reduce(function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc},{})},exports.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce(function(acc,param){var key=param[0],value=param[1];return""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"},"?").replace(/&$/,"")}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search};
|
package/dist/index.umd.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* @ezuikit/utils-tools v2.0.
|
|
2
|
+
* @ezuikit/utils-tools v2.0.9
|
|
3
3
|
* tools utils
|
|
4
|
-
* Copyright (c) 2026-11-
|
|
4
|
+
* Copyright (c) 2026-11-03 Ezviz-OpenBiz
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*/
|
|
7
|
-
!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).Tools={})}(this,function(exports){"use strict";function isHttp(url){return/^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1])}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","")}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.streamTypeIn=pathnames[2].includes(".hd.")?1:2,obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file&&["live","playback","cloudplayback","download"].includes(file)&&u.search.includes("dev=")&&u.search.includes("stream=")){var deviceSerial=u.searchParams.get("dev"),channelNo=u.searchParams.get("chn")||"1",sessionToken=u.searchParams.get("ssn"),stream=u.searchParams.get("stream"),streamTypeIn=Number(stream);if(!("https:"===u.protocol&&deviceSerial&&channelNo&&sessionToken&&streamTypeIn))return{};var searchParams={};u.searchParams.forEach(function(value,key){searchParams[key]=value}),obj.protocol=u.protocol,obj.search=u.search,obj.searchParams=searchParams,obj.pathname=u.pathname,obj.origin=u.origin,obj.href=url,obj.hostname=u.host,obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,obj.streamTypeIn=streamTypeIn;var validateCode=u.searchParams.get("code");return validateCode&&(obj.validateCode=validateCode),"live"===file?(obj.type="live",obj.definition=1===streamTypeIn?"hd":"sd"):"playback"===file?(obj.type="rec",obj.recType=""):"cloudplayback"===file?(obj.type="rec",obj.recType="cloud"):obj.type="download",obj}if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial1=m[1],channelNo1=m[2],quality=m[3];return obj.deviceSerial=deviceSerial1,obj.channelNo=channelNo1,obj.streamTypeIn=+quality,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return{}}function isEzvizUrl(url){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^ezopen:\/\//.test(path)||/^http[s]?:\/\//.test(path)&&/\/openlive\/|\/openpb\//.test(path)&&/[\w:\d]+_\d+_\d+\.(flv|m3u8)$/.test(path)||/\/(playback|cloudplayback|live)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce(function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)},0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return(it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(!o)return;if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return"year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else{if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"")}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return(date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn)}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return/^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return"second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();function getNavigatorLike(){if("undefined"!=typeof navigator)return navigator}function getWindowLike(){if("undefined"!=typeof window)return window}function detectSecureContext(){var win=getWindowLike();if("boolean"==typeof(null==win?void 0:win.isSecureContext))return win.isSecureContext;if("undefined"==typeof location)return!1;if("https:"===location.protocol||"file:"===location.protocol)return!0;var hostname=location.hostname||"";return"localhost"===hostname||/\.localhost$/.test(hostname)||"127.0.0.1"===hostname||"[::1]"===hostname||"::1"===hostname}function withTimeout(promise,timeout){return timeout>0?new Promise(function(resolve,reject){var settled=!1,timer=setTimeout(function(){settled||(settled=!0,reject(new Error("[microphone] detect timeout")))},timeout),finish=function(run){settled||(settled=!0,clearTimeout(timer),run())};promise.then(function(value){return finish(function(){return resolve(value)})},function(error){return finish(function(){return reject(error)})})}):promise}function getMicrophoneCapabilities(){var _nav_permissions,nav=getNavigatorLike(),win=getWindowLike(),mediaDevices=null==nav?void 0:nav.mediaDevices;return{secureContext:detectSecureContext(),mediaDevices:!!mediaDevices,getUserMedia:"function"==typeof(null==mediaDevices?void 0:mediaDevices.getUserMedia),legacyGetUserMedia:"function"==typeof(null==nav?void 0:nav.getUserMedia)||"function"==typeof(null==nav?void 0:nav.webkitGetUserMedia)||"function"==typeof(null==nav?void 0:nav.mozGetUserMedia)||"function"==typeof(null==nav?void 0:nav.msGetUserMedia),enumerateDevices:"function"==typeof(null==mediaDevices?void 0:mediaDevices.enumerateDevices),permissionsQuery:"function"==typeof(null==nav||null==(_nav_permissions=nav.permissions)?void 0:_nav_permissions.query),mediaRecorder:"function"==typeof(null==win?void 0:win.MediaRecorder),audioContext:"function"==typeof(null==win?void 0:win.AudioContext)||"function"==typeof(null==win?void 0:win.webkitAudioContext)}}function resolveCapabilityReason(capabilities){return"undefined"==typeof navigator?"unsupported-environment":capabilities.secureContext?!1===function(){var _doc_permissionsPolicy;if("undefined"!=typeof document){var doc=document,policy=null!=(_doc_permissionsPolicy=doc.permissionsPolicy)?_doc_permissionsPolicy:doc.featurePolicy;if("function"==typeof(null==policy?void 0:policy.allowsFeature))try{return policy.allowsFeature("microphone")}catch(unused){return}}}()?"permissions-policy":capabilities.getUserMedia||capabilities.legacyGetUserMedia?"ok":"no-getusermedia":"insecure-context"}exports.DateTime=DateTime,exports.addVc=function(url,codecs){void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter(function(item){return!/^vc=\d?/.test(item)}).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},exports.checkMicrophoneSupport=function(options){void 0===options&&(options={});var _options_checkDevice=options.checkDevice,checkDevice=void 0===_options_checkDevice||_options_checkDevice,_options_checkPermission=options.checkPermission,checkPermission=void 0===_options_checkPermission||_options_checkPermission,_options_timeout=options.timeout,timeout=void 0===_options_timeout?2e3:_options_timeout,capabilities=getMicrophoneCapabilities(),capabilityReason=resolveCapabilityReason(capabilities);if("ok"!==capabilityReason)return Promise.resolve({supported:!1,available:!1,reason:capabilityReason,permission:"unknown",device:"unknown",willPrompt:!1,capabilities:capabilities});var permissionTask=checkPermission?function(timeout){var _getNavigatorLike,permissions=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.permissions;if(!permissions||"function"!=typeof permissions.query)return Promise.resolve("unknown");try{return withTimeout(permissions.query({name:"microphone"}),timeout).then(function(status){return"granted"===(state=status.state)||"denied"===state||"prompt"===state?state:"unknown";var state},function(){return"unknown"})}catch(unused){return Promise.resolve("unknown")}}(timeout):Promise.resolve("unknown"),deviceTask=checkDevice?function(timeout){var _getNavigatorLike,pending,mediaDevices=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.mediaDevices;if(!mediaDevices||"function"!=typeof mediaDevices.enumerateDevices)return Promise.resolve("unknown");try{pending=mediaDevices.enumerateDevices()}catch(unused){return Promise.resolve("unknown")}return withTimeout(pending,timeout).then(function(devices){return Array.isArray(devices)&&0!==devices.length?devices.some(function(device){return"audioinput"===(null==device?void 0:device.kind)})?"present":"absent":"unknown"},function(){return"unknown"})}(timeout):Promise.resolve("unknown");return Promise.all([permissionTask,deviceTask]).then(function(param){var permission=param[0],device=param[1],reason="ok";return"denied"===permission?reason="permission-denied":"absent"===device&&(reason="no-device"),{supported:!0,available:"ok"===reason,reason:reason,permission:permission,device:device,willPrompt:"granted"!==permission&&"denied"!==permission,capabilities:capabilities}})},exports.getMicrophoneCapabilities=getMicrophoneCapabilities,exports.getQuery=getQuery,exports.getQueryVC=getQueryVC,exports.getStaticPath=function(path,base){void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return"";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},exports.isEmpty=function(param){return void 0===param||""===param||null===param},exports.isEzvizLiveUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openlive/")||/^ezopen:\/\//.test(path)&&/\.live$/.test(path)||/\/live$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizPlaybackUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openpb/")||/^ezopen:\/\//.test(path)&&/\.rec$/.test(path)||/\/(playback|cloudplayback)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizUrl=isEzvizUrl,exports.isHttp=isHttp,exports.isMicrophoneSupported=function(){return"ok"===resolveCapabilityReason(getMicrophoneCapabilities())},exports.isMobile=function(agent){var _ref,_navigator,_navigator1,_navigator2,_window;return/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_ref=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_ref:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},exports.isRealMobile=function(agent){var _ref,_navigator,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return!1;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return/android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},exports.objectIsNull=function(obj){try{return"{}"===JSON.stringify(obj)}catch(error){return!1}},exports.parseEzopenUrl=parseEzopenUrl,exports.pick=function(obj,keys){return Object.entries(obj).reduce(function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc},{})},exports.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce(function(acc,param){var key=param[0],value=param[1];return""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"},"?").replace(/&$/,"")}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search}});
|
|
7
|
+
!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).Tools={})}(this,function(exports){"use strict";function isHttp(url){return/^http[s]?:\/\//.test(url)}var getQuery=function(url){var query=url.split("?")[1],obj={};if(query)for(var vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");obj[pair[0]]=decodeURIComponent(pair[1])}return obj};function parseEzopenUrl(url){var obj={};if(/^ezopen:\/\//.test(url)){if(url.includes("@")){var endIndex=url.indexOf("@"),startIndex=url.indexOf("//");obj.validateCode=url.substring(startIndex+2,endIndex),url=url.replace(obj.validateCode+"@","")}obj.protocol=url.split("//")[0],obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url;var pathnames=obj.pathname.split("/"),lastPath=pathnames[2].split(".");return obj.deviceSerial=pathnames[1],obj.channelNo=lastPath[0],obj.streamTypeIn=pathnames[2].includes(".hd.")?1:2,obj.type=lastPath[lastPath.length-1],"live"===obj.type&&(obj.definition=lastPath.length>2?lastPath[1]:"sd"),"rec"===obj.type&&pathnames[2]&&(obj.recType=pathnames[2].includes(".cloud.")?"cloud":""),obj.searchParams=getQuery(url),obj}if(isHttp(url))try{var u=new URL(url),file=u.pathname.split("/").pop();if(file&&["live","playback","cloudplayback","download"].includes(file)&&u.search.includes("dev=")&&u.search.includes("stream=")){var deviceSerial=u.searchParams.get("dev"),channelNo=u.searchParams.get("chn")||"1",sessionToken=u.searchParams.get("ssn"),stream=u.searchParams.get("stream"),streamTypeIn=Number(stream);if(!("https:"===u.protocol&&deviceSerial&&channelNo&&sessionToken&&streamTypeIn))return{};var searchParams={};u.searchParams.forEach(function(value,key){searchParams[key]=value}),obj.protocol=u.protocol,obj.search=u.search,obj.searchParams=searchParams,obj.pathname=u.pathname,obj.origin=u.origin,obj.href=url,obj.hostname=u.host,obj.deviceSerial=deviceSerial,obj.channelNo=channelNo,obj.streamTypeIn=streamTypeIn;var validateCode=u.searchParams.get("code");return validateCode&&(obj.validateCode=validateCode),"live"===file?(obj.type="live",obj.definition=1===streamTypeIn?"hd":"sd"):"playback"===file?(obj.type="rec",obj.recType=""):"cloudplayback"===file?(obj.type="rec",obj.recType="cloud"):obj.type="download",obj}if(file){var m=file.match(/^([^_]+)_(\d+)_(\d+)\./);if(m){var deviceSerial1=m[1],channelNo1=m[2],quality=m[3];return obj.deviceSerial=deviceSerial1,obj.channelNo=channelNo1,obj.streamTypeIn=+quality,u.searchParams.get("code")&&(obj.validateCode=u.searchParams.get("code")),obj.search=url.split("?")[1]?"?"+url.split("?")[1]:"",obj.protocol=url.split("//")[0],obj.hostname=url.split("/")[2],obj.origin=obj.protocol+"//"+obj.hostname,obj.pathname=url.split("?")[0].replace(obj.origin,""),obj.href=url,obj.type="live",(url.includes("rec=local")||url.includes("rec=cloud"))&&(obj.type="rec",url.includes("rec=cloud")?obj.recType="cloud":obj.recType=""),"live"===obj.type&&(obj.definition="1"===quality?"hd":"sd"),obj.searchParams=getQuery(url),obj}}}catch(e){}return{}}function isEzvizUrl(url){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";if(/^http[s]?:\/\//.test(path)&&/\/openlive\/|\/openpb\//.test(path)&&(/\.flv$/i.test(path)||/\.m3u8$/i.test(path)||/_\d+$/.test(path))){var newPath=path.replace(/\.flv|\.m3u8/gi,"");if(/_\d+_\d+$/.test(newPath))return!0}return/^ezopen:\/\//.test(path)||/\/(playback|cloudplayback|live)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}var codec={h264:1,h265:2,h266:4,vp8:8,vp9:16,av1:32},getQueryVC=function(CODECS){return CODECS.reduce(function(acc,key){return key=key.toLowerCase(),acc+(codec[key]||0)},0)};function _array_like_to_array(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _create_for_of_iterator_helper_loose(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(it)return(it=it.call(o)).next.bind(it);if(Array.isArray(o)||(it=function(o,minLen){if(!o)return;if("string"==typeof o)return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}(o))||allowArrayLike){it&&(o=it);var i=0;return function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}var DateTime=function(){function DateTime(){}return DateTime.normalizeUnit=function(unit){return"year"===unit||"y"===unit||"年"===unit?"year":"month"===unit||"M"===unit||"月"===unit?"month":"day"===unit||"d"===unit||"日"===unit?"day":"hour"===unit||"h"===unit||"时"===unit?"hour":"minute"===unit||"m"===unit||"分"===unit?"minute":"second"},DateTime.daysInMonth=function(year,month){return new Date(year,month+1,0).getDate()},DateTime.shiftMonth=function(baseDate,months){var result=new Date(baseDate.getTime()),currentDate=result.getDate();result.setDate(1),result.setMonth(result.getMonth()+months);var maxDate=DateTime.daysInMonth(result.getFullYear(),result.getMonth());return result.setDate(Math.min(currentDate,maxDate)),result},DateTime.add=function(input,value,unit){if(void 0===unit&&(unit="day"),!Number.isFinite(value))throw new Error("Invalid value");var baseDate=DateTime.toDate(input),normalizedUnit=DateTime.normalizeUnit(unit);if("year"===normalizedUnit)return DateTime.shiftMonth(baseDate,12*value);if("month"===normalizedUnit)return DateTime.shiftMonth(baseDate,value);var result=new Date(baseDate.getTime());return result.setTime(result.getTime()+value*{day:864e5,hour:36e5,minute:6e4,second:1e3}[normalizedUnit]),result},DateTime.subtract=function(input,value,unit){return void 0===unit&&(unit="day"),DateTime.add(input,-value,unit)},DateTime.fillZero=function(num,len){return void 0===len&&(len=2),num.toString().padStart(len,"0")},DateTime.format=function(input,format){var date;if(_instanceof(input,Date))date=input;else{if("number"!=typeof input&&"string"!=typeof input)throw new Error("Invalid date input");date=DateTime.toDate(input+"")}for(var _step,result=format,_iterator=_create_for_of_iterator_helper_loose([[/(yyyy|YYYY)/g,function(){return DateTime.fillZero(date.getFullYear(),4)}],[/(yy|YY)/g,function(){return DateTime.fillZero(date.getFullYear()%100,2)}],[/(MM)/g,function(){return DateTime.fillZero(date.getMonth()+1,2)}],[/(M)/g,function(){return(date.getMonth()+1).toString()}],[/(dd|DD)/g,function(){return DateTime.fillZero(date.getDate(),2)}],[/(d|D)/g,function(){return date.getDate().toString()}],[/(HH|hh)/g,function(){return DateTime.fillZero(date.getHours(),2)}],[/(H|h)/g,function(){return date.getHours().toString()}],[/(mm)/g,function(){return DateTime.fillZero(date.getMinutes(),2)}],[/(m)/g,function(){return date.getMinutes().toString()}],[/(ss|SS)/g,function(){return DateTime.fillZero(date.getSeconds(),2)}],[/(s|S)/g,function(){return date.getSeconds().toString()}],[/(fff)/g,function(){return DateTime.fillZero(date.getMilliseconds(),3)}]]);!(_step=_iterator()).done;){var _step_value=_step.value,regexp=_step_value[0],fn=_step_value[1];result=result.replace(regexp,fn)}return result},DateTime.toDate=function(str){if(_instanceof(str,Date))return str;str=(str+"").trim().replace(/\/|\./gi,"-"),/^\d{4}$/.test(str)&&(str+="-01"),/^\d{4}-\d{2}$/.test(str)&&(str+="-01");try{return/^\d{4}-\d{2}-\d{2}$/.test(str)?new Date(+str.slice(0,4),+str.slice(5,7)-1,+str.slice(8,10),0,0,0):/^\d{8}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),0,0,0)):/^\d{14}$/.test(str)?(str+="",new Date(+str.slice(0,4),+str.slice(4,6)-1,+str.slice(6,8),+str.slice(8,10),+str.slice(10,12),+str.slice(12,14))):/^\d{13}$/.test(str)?new Date(Number(str)):/^\d{10}$/.test(str)?new Date(1e3*Number(str)):new Date(str)}catch(error){throw new Error("Invalid date string")}},DateTime.diff=function(date1,date2,type){void 0===type&&(type="second");var d1=DateTime.toDate(date1),d2=DateTime.toDate(date2);return"second"===type?Math.floor((d1.getTime()-d2.getTime())/1e3):"minute"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60):"hour"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60):"day"===type?Math.floor((d1.getTime()-d2.getTime())/1e3/60/60/24):Math.abs(d1.getTime()-d2.getTime())},DateTime}();function getNavigatorLike(){if("undefined"!=typeof navigator)return navigator}function getWindowLike(){if("undefined"!=typeof window)return window}function detectSecureContext(){var win=getWindowLike();if("boolean"==typeof(null==win?void 0:win.isSecureContext))return win.isSecureContext;if("undefined"==typeof location)return!1;if("https:"===location.protocol||"file:"===location.protocol)return!0;var hostname=location.hostname||"";return"localhost"===hostname||/\.localhost$/.test(hostname)||"127.0.0.1"===hostname||"[::1]"===hostname||"::1"===hostname}function withTimeout(promise,timeout){return timeout>0?new Promise(function(resolve,reject){var settled=!1,timer=setTimeout(function(){settled||(settled=!0,reject(new Error("[microphone] detect timeout")))},timeout),finish=function(run){settled||(settled=!0,clearTimeout(timer),run())};promise.then(function(value){return finish(function(){return resolve(value)})},function(error){return finish(function(){return reject(error)})})}):promise}function getMicrophoneCapabilities(){var _nav_permissions,nav=getNavigatorLike(),win=getWindowLike(),mediaDevices=null==nav?void 0:nav.mediaDevices;return{secureContext:detectSecureContext(),mediaDevices:!!mediaDevices,getUserMedia:"function"==typeof(null==mediaDevices?void 0:mediaDevices.getUserMedia),legacyGetUserMedia:"function"==typeof(null==nav?void 0:nav.getUserMedia)||"function"==typeof(null==nav?void 0:nav.webkitGetUserMedia)||"function"==typeof(null==nav?void 0:nav.mozGetUserMedia)||"function"==typeof(null==nav?void 0:nav.msGetUserMedia),enumerateDevices:"function"==typeof(null==mediaDevices?void 0:mediaDevices.enumerateDevices),permissionsQuery:"function"==typeof(null==nav||null==(_nav_permissions=nav.permissions)?void 0:_nav_permissions.query),mediaRecorder:"function"==typeof(null==win?void 0:win.MediaRecorder),audioContext:"function"==typeof(null==win?void 0:win.AudioContext)||"function"==typeof(null==win?void 0:win.webkitAudioContext)}}function resolveCapabilityReason(capabilities){return"undefined"==typeof navigator?"unsupported-environment":capabilities.secureContext?!1===function(){var _doc_permissionsPolicy;if("undefined"!=typeof document){var doc=document,policy=null!=(_doc_permissionsPolicy=doc.permissionsPolicy)?_doc_permissionsPolicy:doc.featurePolicy;if("function"==typeof(null==policy?void 0:policy.allowsFeature))try{return policy.allowsFeature("microphone")}catch(unused){return}}}()?"permissions-policy":capabilities.getUserMedia||capabilities.legacyGetUserMedia?"ok":"no-getusermedia":"insecure-context"}exports.DateTime=DateTime,exports.addVc=function(url,codecs){void 0===codecs&&(codecs=["h264"]);var vc=getQueryVC(codecs||["h264"]),host=url.split("?")[0],query=url.split("?")[1];return query=(query||"").split("&").filter(function(item){return!/^vc=\d?/.test(item)}).join("&"),host+"?"+(query+=(query?"&":"")+"vc="+vc)},exports.checkMicrophoneSupport=function(options){void 0===options&&(options={});var _options_checkDevice=options.checkDevice,checkDevice=void 0===_options_checkDevice||_options_checkDevice,_options_checkPermission=options.checkPermission,checkPermission=void 0===_options_checkPermission||_options_checkPermission,_options_timeout=options.timeout,timeout=void 0===_options_timeout?2e3:_options_timeout,capabilities=getMicrophoneCapabilities(),capabilityReason=resolveCapabilityReason(capabilities);if("ok"!==capabilityReason)return Promise.resolve({supported:!1,available:!1,reason:capabilityReason,permission:"unknown",device:"unknown",willPrompt:!1,capabilities:capabilities});var permissionTask=checkPermission?function(timeout){var _getNavigatorLike,permissions=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.permissions;if(!permissions||"function"!=typeof permissions.query)return Promise.resolve("unknown");try{return withTimeout(permissions.query({name:"microphone"}),timeout).then(function(status){return"granted"===(state=status.state)||"denied"===state||"prompt"===state?state:"unknown";var state},function(){return"unknown"})}catch(unused){return Promise.resolve("unknown")}}(timeout):Promise.resolve("unknown"),deviceTask=checkDevice?function(timeout){var _getNavigatorLike,pending,mediaDevices=null==(_getNavigatorLike=getNavigatorLike())?void 0:_getNavigatorLike.mediaDevices;if(!mediaDevices||"function"!=typeof mediaDevices.enumerateDevices)return Promise.resolve("unknown");try{pending=mediaDevices.enumerateDevices()}catch(unused){return Promise.resolve("unknown")}return withTimeout(pending,timeout).then(function(devices){return Array.isArray(devices)&&0!==devices.length?devices.some(function(device){return"audioinput"===(null==device?void 0:device.kind)})?"present":"absent":"unknown"},function(){return"unknown"})}(timeout):Promise.resolve("unknown");return Promise.all([permissionTask,deviceTask]).then(function(param){var permission=param[0],device=param[1],reason="ok";return"denied"===permission?reason="permission-denied":"absent"===device&&(reason="no-device"),{supported:!0,available:"ok"===reason,reason:reason,permission:permission,device:device,willPrompt:"granted"!==permission&&"denied"!==permission,capabilities:capabilities}})},exports.getMicrophoneCapabilities=getMicrophoneCapabilities,exports.getQuery=getQuery,exports.getQueryVC=getQueryVC,exports.getStaticPath=function(path,base){void 0===base&&(base="");var protocolReg=/^(https?:\/\/|^\/\/)/;if(""===path||void 0===path)return"";if(protocolReg.test(path))return path;path=path.replace(/\/+/g,"/"),base=protocolReg.test(base||"")?base:window.location.href;try{return new URL(path,base).href}catch(error){return path}},exports.isEmpty=function(param){return void 0===param||""===param||null===param},exports.isEzvizLiveUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openlive/")||/^ezopen:\/\//.test(path)&&/\.live$/.test(path)||/\/live$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizPlaybackUrl=function(url){if(isEzvizUrl(url)){var _url_split,path=url.split("?")[0],queryStr=(null==(_url_split=url.split("?"))?void 0:_url_split[1])||"";return/^http[s]?:\/\//.test(path)&&path.includes("/openpb/")||/^ezopen:\/\//.test(path)&&/\.rec$/.test(path)||/\/(playback|cloudplayback)$/.test(path)&&queryStr&&/stream=\d+/.test(queryStr)&&queryStr.includes("dev=")&&queryStr.includes("ssn=")}return!1},exports.isEzvizUrl=isEzvizUrl,exports.isHttp=isHttp,exports.isMicrophoneSupported=function(){return"ok"===resolveCapabilityReason(getMicrophoneCapabilities())},exports.isMobile=function(agent){var _ref,_navigator,_navigator1,_navigator2,_window;return/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|Opera Mini)/i.test(null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)||/Macintosh/i.test(agent||(null==(_navigator1=navigator)?void 0:_navigator1.userAgent))&&(null!=(_ref=null==(_navigator2=navigator)?void 0:_navigator2.maxTouchPoints)?_ref:0)>1||!!(null==(_window=window)?void 0:_window.__IS_MOBILE_SIMULATOR__)},exports.isRealMobile=function(agent){var _ref,_navigator,ua=(null!=(_ref=null!=agent?agent:null==(_navigator=navigator)?void 0:_navigator.userAgent)?_ref:"").toLowerCase();if(/ipad|tablet|playbook|silk|android(?!.*mobile)/i.test(ua))return!1;var hasTouch="ontouchstart"in window||navigator.maxTouchPoints>0;return/android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(ua)&&hasTouch},exports.objectIsNull=function(obj){try{return"{}"===JSON.stringify(obj)}catch(error){return!1}},exports.parseEzopenUrl=parseEzopenUrl,exports.pick=function(obj,keys){return Object.entries(obj).reduce(function(acc,param){var key=param[0],value=param[1];return keys.includes(key)&&(acc[key]=value),acc},{})},exports.switchEzopenUrl=function(url,options){var _ref=null!=options?options:{},type=_ref.type,recType=_ref.recType,search=_ref.search,definition=_ref.definition,channelNo=_ref.channelNo,deviceSerial=_ref.deviceSerial,validateCode=_ref.validateCode,obj=parseEzopenUrl(url);if(search){var ns=Object.assign({},obj.searchParams,getQuery("?"+search.replace("?","")));search=Object.entries(ns).reduce(function(acc,param){var key=param[0],value=param[1];return""===value?acc:acc+=key+"="+encodeURIComponent(value)+"&"},"?").replace(/&$/,"")}else search=obj.search;return type=type||obj.type,recType=null!=recType?recType:obj.recType,definition=null!=definition?definition:obj.definition,channelNo=channelNo||obj.channelNo,deviceSerial=deviceSerial||obj.deviceSerial,validateCode=null!=validateCode?validateCode:obj.validateCode,obj.protocol+"//"+(validateCode?validateCode+"@":"")+obj.hostname+"/"+deviceSerial+"/"+channelNo+("rec"===type&&recType?"."+recType:"")+("live"===type&&"hd"===definition?"."+definition:"")+"."+type+search}});
|