UNPKG

@scrypted/amcrest

Version:

Amcrest Plugin for Scrypted

2 lines 154 kB
/*! For license information please see main.nodejs.js.LICENSE.txt */ (()=>{var e={4694:(e,t)=>{t.jspack=new function(){var e,t=!1,r=this;r._DeArray=function(e,t,r){return[e.slice(t,t+r)]},r._EnArray=function(e,t,r,n){for(var i=0;i<r;e[t+i]=n[i]?n[i]:0,i++);},r._DeChar=function(e,t){return String.fromCharCode(e[t])},r._EnChar=function(e,t,r){e[t]=r.charCodeAt(0)},r._DeInt=function(r,n){var i,s,o,a=t?e.len-1:0,c=t?-1:1,u=a+c*e.len;for(i=0,s=a,o=1;s!=u;i+=r[n+s]*o,s+=c,o*=256);return e.bSigned&&i&Math.pow(2,8*e.len-1)&&(i-=Math.pow(2,8*e.len)),i},r._EnInt=function(r,n,i){var s,o=t?e.len-1:0,a=t?-1:1,c=o+a*e.len;for(i=i<e.min?e.min:i>e.max?e.max:i,s=o;s!=c;r[n+s]=255&i,s+=a,i>>=8);},r._DeString=function(e,t,r){for(var n=new Array(r),i=0;i<r;n[i]=String.fromCharCode(e[t+i]),i++);return n.join("")},r._EnString=function(e,t,r,n){for(var i,s=0;s<r;e[t+s]=(i=n.charCodeAt(s))?i:0,s++);},r._De754=function(r,n){var i,s,o,a,c,u,d,p,l,h;for(d=e.mLen,l=(h=(1<<(p=8*e.len-e.mLen-1))-1)>>1,a=t?0:e.len-1,c=t?1:-1,i=r[n+a],a+=c,s=i&(1<<-(u=-7))-1,i>>=-u,u+=p;u>0;s=256*s+r[n+a],a+=c,u-=8);for(o=s&(1<<-u)-1,s>>=-u,u+=d;u>0;o=256*o+r[n+a],a+=c,u-=8);switch(s){case 0:s=1-l;break;case h:return o?NaN:1/0*(i?-1:1);default:o+=Math.pow(2,d),s-=l}return(i?-1:1)*o*Math.pow(2,s-d)},r._En754=function(r,n,i){var s,o,a,c,u,d,p,l,h,m;for(p=e.mLen,h=(m=(1<<(l=8*e.len-e.mLen-1))-1)>>1,s=i<0?1:0,i=Math.abs(i),isNaN(i)||i==1/0?(a=isNaN(i)?1:0,o=m):(o=Math.floor(Math.log(i)/Math.LN2),i*(d=Math.pow(2,-o))<1&&(o--,d*=2),(i+=o+h>=1?e.rt/d:e.rt*Math.pow(2,1-h))*d>=2&&(o++,d/=2),o+h>=m?(a=0,o=m):o+h>=1?(a=(i*d-1)*Math.pow(2,p),o+=h):(a=i*Math.pow(2,h-1)*Math.pow(2,p),o=0)),c=t?e.len-1:0,u=t?-1:1;p>=8;r[n+c]=255&a,c+=u,a/=256,p-=8);for(o=o<<p|a,l+=p;l>0;r[n+c]=255&o,c+=u,o/=256,l-=8);r[n+c-u]|=128*s},r._DeInt64=function(r,n){var i,s,o,a=t?0:7,c=t?1:-1,u=a+8*c,d=[0,0,!e.bSigned];for(i=a,o=1,s=0;i!=u;d[o]=(d[o]<<8>>>0)+r[n+i],i+=c,o=++s<4?1:0);return d},r._EnInt64=function(e,r,n){var i,s,o,a,c=t?0:7,u=t?1:-1,d=c+8*u;for(i=c,o=1,s=0,a=24;i!=d;e[r+i]=n[o]>>a&255,i+=u,o=++s<4?1:0,a=24-s%4*8);},r._sPattern="(\\d + )?([AxcbBhHsfdiIlLqQ])",r._lenLut={A:1,x:1,c:1,b:1,B:1,h:2,H:2,s:1,f:4,d:8,i:4,I:4,l:4,L:4,q:8,Q:8},r._elLut={A:{en:r._EnArray,de:r._DeArray},s:{en:r._EnString,de:r._DeString},c:{en:r._EnChar,de:r._DeChar},b:{en:r._EnInt,de:r._DeInt,len:1,bSigned:!0,min:-Math.pow(2,7),max:Math.pow(2,7)-1},B:{en:r._EnInt,de:r._DeInt,len:1,bSigned:!1,min:0,max:Math.pow(2,8)-1},h:{en:r._EnInt,de:r._DeInt,len:2,bSigned:!0,min:-Math.pow(2,15),max:Math.pow(2,15)-1},H:{en:r._EnInt,de:r._DeInt,len:2,bSigned:!1,min:0,max:Math.pow(2,16)-1},i:{en:r._EnInt,de:r._DeInt,len:4,bSigned:!0,min:-Math.pow(2,31),max:Math.pow(2,31)-1},I:{en:r._EnInt,de:r._DeInt,len:4,bSigned:!1,min:0,max:Math.pow(2,32)-1},l:{en:r._EnInt,de:r._DeInt,len:4,bSigned:!0,min:-Math.pow(2,31),max:Math.pow(2,31)-1},L:{en:r._EnInt,de:r._DeInt,len:4,bSigned:!1,min:0,max:Math.pow(2,32)-1},f:{en:r._En754,de:r._De754,len:4,mLen:23,rt:Math.pow(2,-24)-Math.pow(2,-77)},d:{en:r._En754,de:r._De754,len:8,mLen:52,rt:0},q:{en:r._EnInt64,de:r._DeInt64,bSigned:!0},Q:{en:r._EnInt64,de:r._DeInt64,bSigned:!1}},r._UnpackSeries=function(t,r,n,i){for(var s=e.de,o=[],a=0;a<t;o.push(s(n,i+a*r)),a++);return o},r._PackSeries=function(t,r,n,i,s,o){for(var a=e.en,c=0;c<t;a(n,i+c*r,s[o+c]),c++);},r.Unpack=function(r,n,i){t="<"!=r.charAt(0),i=i||0;for(var s,o,a,c=new RegExp(this._sPattern,"g"),u=[];s=c.exec(r);){if(i+(o=null==s[1]||""==s[1]?1:parseInt(s[1]))*(a=this._lenLut[s[2]])>n.length)return;switch(s[2]){case"A":case"s":u.push(this._elLut[s[2]].de(n,i,o));break;case"c":case"b":case"B":case"h":case"H":case"i":case"I":case"l":case"L":case"f":case"d":case"q":case"Q":e=this._elLut[s[2]],u.push(this._UnpackSeries(o,a,n,i))}i+=o*a}return Array.prototype.concat.apply([],u)},r.PackTo=function(r,n,i,s){t="<"!=r.charAt(0);for(var o,a,c,u,d=new RegExp(this._sPattern,"g"),p=0;o=d.exec(r);){if(i+(a=null==o[1]||""==o[1]?1:parseInt(o[1]))*(c=this._lenLut[o[2]])>n.length)return!1;switch(o[2]){case"A":case"s":if(p+1>s.length)return!1;this._elLut[o[2]].en(n,i,a,s[p]),p+=1;break;case"c":case"b":case"B":case"h":case"H":case"i":case"I":case"l":case"L":case"f":case"d":case"q":case"Q":if(e=this._elLut[o[2]],p+a>s.length)return!1;this._PackSeries(a,c,n,i,s,p),p+=a;break;case"x":for(u=0;u<a;u++)n[i+u]=0}i+=a*c}return n},r.Pack=function(e,t){return this.PackTo(e,new Array(this.CalcLength(e)),0,t)},r.CalcLength=function(e){for(var t,r=new RegExp(this._sPattern,"g"),n=0;t=r.exec(e);)n+=(null==t[1]||""==t[1]?1:parseInt(t[1]))*this._lenLut[t[2]];return n}}},8597:(e,t)=>{"use strict";var r=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,n=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,i=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,s=/\\([\u000b\u0020-\u00ff])/g,o=/([\\"])/g,a=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;function c(e){var t=String(e);if(i.test(t))return t;if(t.length>0&&!n.test(t))throw new TypeError("invalid parameter value");return'"'+t.replace(o,"\\$1")+'"'}function u(e){this.parameters=Object.create(null),this.type=e}t.format=function(e){if(!e||"object"!=typeof e)throw new TypeError("argument obj is required");var t=e.parameters,r=e.type;if(!r||!a.test(r))throw new TypeError("invalid type");var n=r;if(t&&"object"==typeof t)for(var s,o=Object.keys(t).sort(),u=0;u<o.length;u++){if(s=o[u],!i.test(s))throw new TypeError("invalid parameter name");n+="; "+s+"="+c(t[s])}return n},t.parse=function(e){if(!e)throw new TypeError("argument string is required");var t="object"==typeof e?function(e){var t;"function"==typeof e.getHeader?t=e.getHeader("content-type"):"object"==typeof e.headers&&(t=e.headers&&e.headers["content-type"]);if("string"!=typeof t)throw new TypeError("content-type header is missing from object");return t}(e):e;if("string"!=typeof t)throw new TypeError("argument string is required to be a string");var n=t.indexOf(";"),i=-1!==n?t.slice(0,n).trim():t.trim();if(!a.test(i))throw new TypeError("invalid media type");var o=new u(i.toLowerCase());if(-1!==n){var c,d,p;for(r.lastIndex=n;d=r.exec(t);){if(d.index!==n)throw new TypeError("invalid parameter format");n+=d[0].length,c=d[1].toLowerCase(),34===(p=d[2]).charCodeAt(0)&&-1!==(p=p.slice(1,-1)).indexOf("\\")&&(p=p.replace(s,"$1")),o.parameters[c]=p}if(n!==t.length)throw new TypeError("invalid parameter format")}return o}},2743:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.sdk=t.MixinDeviceBase=t.ScryptedDeviceBase=void 0,i(r(9849),t);const s=r(9849);r(3339);class o extends s.DeviceBase{constructor(e){super(),this.nativeId=e}get storage(){return this._storage||(this._storage=t.sdk.deviceManager.getDeviceStorage(this.nativeId)),this._storage}get log(){return this._log||(this._log=t.sdk.deviceManager.getDeviceLogger(this.nativeId)),this._log}get console(){return this._console||(this._console=t.sdk.deviceManager.getDeviceConsole(this.nativeId)),this._console}async createMediaObject(e,r){return t.sdk.mediaManager.createMediaObject(e,r,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:t.sdk.deviceManager.getMixinConsole(e.sourceId,this.nativeId)}_lazyLoadDeviceState(){this._deviceState||(this.nativeId?this._deviceState=t.sdk.deviceManager.getDeviceState(this.nativeId):this._deviceState=t.sdk.deviceManager.getDeviceState())}onDeviceEvent(e,r){return t.sdk.deviceManager.onDeviceEvent(this.nativeId,e,r)}}t.ScryptedDeviceBase=o;class a extends s.DeviceBase{constructor(e){super(),this._listeners=new Set,this.mixinDevice=e.mixinDevice,this.mixinDeviceInterfaces=e.mixinDeviceInterfaces,this.mixinStorageSuffix=e.mixinStorageSuffix,this._deviceState=e.mixinDeviceState,this.nativeId=t.sdk.systemManager.getDeviceById(this.id).nativeId,this.mixinProviderNativeId=e.mixinProviderNativeId,this._deviceState.__rpcproxy_traps_all_properties&&"string"==typeof this._deviceState.id&&(this._deviceState=t.sdk.deviceManager.createDeviceState(this._deviceState.id,this._deviceState.setState))}get storage(){if(!this._storage){const e=this.mixinStorageSuffix,r=this.id+(e?":"+e:"");this._storage=t.sdk.deviceManager.getMixinStorage(r,this.mixinProviderNativeId)}return this._storage}get console(){return this._console||(t.sdk.deviceManager.getMixinConsole?this._console=t.sdk.deviceManager.getMixinConsole(this.id,this.mixinProviderNativeId):this._console=t.sdk.deviceManager.getDeviceConsole(this.mixinProviderNativeId)),this._console}async createMediaObject(e,r){return t.sdk.mediaManager.createMediaObject(e,r,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:t.sdk.deviceManager.getMixinConsole(e.sourceId,this.mixinProviderNativeId)}onDeviceEvent(e,r){return t.sdk.deviceManager.onMixinEvent(this.id,this,e,r)}_lazyLoadDeviceState(){}manageListener(e){this._listeners.add(e)}release(){for(const e of this._listeners)e.removeListener()}}t.MixinDeviceBase=a,function(){function e(e){return function(){return this._lazyLoadDeviceState(),this._deviceState?.[e]}}function t(e){return function(t){this._lazyLoadDeviceState(),this._deviceState?this._deviceState[e]=t:console.warn("device state is unavailable. the device must be discovered with deviceManager.onDeviceDiscovered or deviceManager.onDevicesChanged before the state can be set.")}}for(const r of Object.values(s.ScryptedInterfaceProperty))r!==s.ScryptedInterfaceProperty.nativeId&&(Object.defineProperty(o.prototype,r,{set:t(r),get:e(r)}),Object.defineProperty(a.prototype,r,{set:t(r),get:e(r)}))}(),t.sdk={};try{let e=!1;try{process.env.SCRYPTED_SDK_ES_MODULE||process.env.SCRYPTED_SDK_MODULE;const n=process.env.SCRYPTED_SDK_CJS_MODULE||process.env.SCRYPTED_SDK_MODULE;if(n)if("undefined"!=typeof require){const r=require(process.env.SCRYPTED_SDK_MODULE);Object.assign(t.sdk,r.getScryptedStatic()),e=!0}else{const i=r(394)(n);Object.assign(t.sdk,i.getScryptedStatic()),e=!0}}catch(e){throw console.warn("failed to load sdk module",e),e}if(!e){let e;try{e=pluginRuntimeAPI}catch(e){}Object.assign(t.sdk,{log:deviceManager.getDeviceLogger(void 0),deviceManager,endpointManager,mediaManager,systemManager,pluginHostAPI,...e})}try{t.sdk.systemManager.setScryptedInterfaceDescriptors?.(s.TYPES_VERSION,s.ScryptedInterfaceDescriptors)?.catch((()=>{}))}catch(e){}}catch(e){console.error("sdk initialization error, import @scrypted/types or use @scrypted/client instead",e)}t.default=t.sdk},394:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=394,e.exports=t},9849:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ScryptedMimeTypes=t.ScryptedInterface=t.MediaPlayerState=t.SecuritySystemObstruction=t.SecuritySystemMode=t.AirQuality=t.AirPurifierMode=t.AirPurifierStatus=t.ChargeState=t.LockState=t.PanTiltZoomMovement=t.ThermostatMode=t.TemperatureUnit=t.FanMode=t.HumidityMode=t.ScryptedDeviceType=t.ScryptedInterfaceDescriptors=t.ScryptedInterfaceMethod=t.ScryptedInterfaceProperty=t.DeviceBase=t.TYPES_VERSION=void 0,t.TYPES_VERSION="0.3.107";var r,n,i,s,o,a,c,u,d,p,l,h,m,f,g,y,v,S;t.DeviceBase=class{},function(e){e.id="id",e.info="info",e.interfaces="interfaces",e.mixins="mixins",e.name="name",e.nativeId="nativeId",e.pluginId="pluginId",e.providedInterfaces="providedInterfaces",e.providedName="providedName",e.providedRoom="providedRoom",e.providedType="providedType",e.providerId="providerId",e.room="room",e.type="type",e.scryptedRuntimeArguments="scryptedRuntimeArguments",e.on="on",e.brightness="brightness",e.colorTemperature="colorTemperature",e.rgb="rgb",e.hsv="hsv",e.buttons="buttons",e.running="running",e.paused="paused",e.docked="docked",e.temperatureSetting="temperatureSetting",e.temperature="temperature",e.temperatureUnit="temperatureUnit",e.humidity="humidity",e.audioVolumes="audioVolumes",e.recordingActive="recordingActive",e.ptzCapabilities="ptzCapabilities",e.lockState="lockState",e.entryOpen="entryOpen",e.batteryLevel="batteryLevel",e.chargeState="chargeState",e.online="online",e.fromMimeType="fromMimeType",e.toMimeType="toMimeType",e.converters="converters",e.binaryState="binaryState",e.tampered="tampered",e.sleeping="sleeping",e.powerDetected="powerDetected",e.audioDetected="audioDetected",e.motionDetected="motionDetected",e.ambientLight="ambientLight",e.occupied="occupied",e.flooded="flooded",e.ultraviolet="ultraviolet",e.luminance="luminance",e.position="position",e.securitySystemState="securitySystemState",e.pm10Density="pm10Density",e.pm25Density="pm25Density",e.vocDensity="vocDensity",e.noxDensity="noxDensity",e.co2ppm="co2ppm",e.airQuality="airQuality",e.airPurifierState="airPurifierState",e.filterChangeIndication="filterChangeIndication",e.filterLifeLevel="filterLifeLevel",e.humiditySetting="humiditySetting",e.fan="fan",e.applicationInfo="applicationInfo",e.systemDevice="systemDevice"}(r||(t.ScryptedInterfaceProperty=r={})),function(e){e.listen="listen",e.probe="probe",e.setMixins="setMixins",e.setName="setName",e.setRoom="setRoom",e.setType="setType",e.getPluginJson="getPluginJson",e.turnOff="turnOff",e.turnOn="turnOn",e.setBrightness="setBrightness",e.getTemperatureMaxK="getTemperatureMaxK",e.getTemperatureMinK="getTemperatureMinK",e.setColorTemperature="setColorTemperature",e.setRgb="setRgb",e.setHsv="setHsv",e.pressButton="pressButton",e.sendNotification="sendNotification",e.start="start",e.stop="stop",e.pause="pause",e.resume="resume",e.dock="dock",e.setTemperature="setTemperature",e.setTemperatureUnit="setTemperatureUnit",e.getPictureOptions="getPictureOptions",e.takePicture="takePicture",e.getAudioStream="getAudioStream",e.setAudioVolumes="setAudioVolumes",e.startDisplay="startDisplay",e.stopDisplay="stopDisplay",e.getVideoStream="getVideoStream",e.getVideoStreamOptions="getVideoStreamOptions",e.getPrivacyMasks="getPrivacyMasks",e.setPrivacyMasks="setPrivacyMasks",e.getVideoTextOverlays="getVideoTextOverlays",e.setVideoTextOverlay="setVideoTextOverlay",e.getRecordingStream="getRecordingStream",e.getRecordingStreamCurrentTime="getRecordingStreamCurrentTime",e.getRecordingStreamOptions="getRecordingStreamOptions",e.getRecordingStreamThumbnail="getRecordingStreamThumbnail",e.deleteRecordingStream="deleteRecordingStream",e.setRecordingActive="setRecordingActive",e.ptzCommand="ptzCommand",e.getRecordedEvents="getRecordedEvents",e.getVideoClip="getVideoClip",e.getVideoClips="getVideoClips",e.getVideoClipThumbnail="getVideoClipThumbnail",e.removeVideoClips="removeVideoClips",e.setVideoStreamOptions="setVideoStreamOptions",e.startIntercom="startIntercom",e.stopIntercom="stopIntercom",e.lock="lock",e.unlock="unlock",e.addPassword="addPassword",e.getPasswords="getPasswords",e.removePassword="removePassword",e.activate="activate",e.deactivate="deactivate",e.isReversible="isReversible",e.closeEntry="closeEntry",e.openEntry="openEntry",e.getDevice="getDevice",e.releaseDevice="releaseDevice",e.adoptDevice="adoptDevice",e.discoverDevices="discoverDevices",e.createDevice="createDevice",e.getCreateDeviceSettings="getCreateDeviceSettings",e.reboot="reboot",e.getRefreshFrequency="getRefreshFrequency",e.refresh="refresh",e.getMediaStatus="getMediaStatus",e.load="load",e.seek="seek",e.skipNext="skipNext",e.skipPrevious="skipPrevious",e.convert="convert",e.convertMedia="convertMedia",e.getSettings="getSettings",e.putSetting="putSetting",e.armSecuritySystem="armSecuritySystem",e.disarmSecuritySystem="disarmSecuritySystem",e.setAirPurifierState="setAirPurifierState",e.getReadmeMarkdown="getReadmeMarkdown",e.getOauthUrl="getOauthUrl",e.onOauthCallback="onOauthCallback",e.canMixin="canMixin",e.getMixin="getMixin",e.releaseMixin="releaseMixin",e.onRequest="onRequest",e.onConnection="onConnection",e.onPush="onPush",e.run="run",e.eval="eval",e.loadScripts="loadScripts",e.saveScript="saveScript",e.forkInterface="forkInterface",e.trackObjects="trackObjects",e.getDetectionInput="getDetectionInput",e.getObjectTypes="getObjectTypes",e.detectObjects="detectObjects",e.generateObjectDetections="generateObjectDetections",e.getDetectionModel="getDetectionModel",e.setHumidity="setHumidity",e.setFan="setFan",e.startRTCSignalingSession="startRTCSignalingSession",e.createRTCSignalingSession="createRTCSignalingSession",e.getScryptedUserAccessControl="getScryptedUserAccessControl",e.generateVideoFrames="generateVideoFrames",e.connectStream="connectStream",e.getTTYSettings="getTTYSettings"}(n||(t.ScryptedInterfaceMethod=n={})),t.ScryptedInterfaceDescriptors={ScryptedDevice:{name:"ScryptedDevice",methods:["listen","probe","setMixins","setName","setRoom","setType"],properties:["id","info","interfaces","mixins","name","nativeId","pluginId","providedInterfaces","providedName","providedRoom","providedType","providerId","room","type"]},ScryptedPlugin:{name:"ScryptedPlugin",methods:["getPluginJson"],properties:[]},ScryptedPluginRuntime:{name:"ScryptedPluginRuntime",methods:[],properties:["scryptedRuntimeArguments"]},OnOff:{name:"OnOff",methods:["turnOff","turnOn"],properties:["on"]},Brightness:{name:"Brightness",methods:["setBrightness"],properties:["brightness"]},ColorSettingTemperature:{name:"ColorSettingTemperature",methods:["getTemperatureMaxK","getTemperatureMinK","setColorTemperature"],properties:["colorTemperature"]},ColorSettingRgb:{name:"ColorSettingRgb",methods:["setRgb"],properties:["rgb"]},ColorSettingHsv:{name:"ColorSettingHsv",methods:["setHsv"],properties:["hsv"]},Buttons:{name:"Buttons",methods:[],properties:["buttons"]},PressButtons:{name:"PressButtons",methods:["pressButton"],properties:[]},Notifier:{name:"Notifier",methods:["sendNotification"],properties:[]},StartStop:{name:"StartStop",methods:["start","stop"],properties:["running"]},Pause:{name:"Pause",methods:["pause","resume"],properties:["paused"]},Dock:{name:"Dock",methods:["dock"],properties:["docked"]},TemperatureSetting:{name:"TemperatureSetting",methods:["setTemperature"],properties:["temperatureSetting"]},Thermometer:{name:"Thermometer",methods:["setTemperatureUnit"],properties:["temperature","temperatureUnit"]},HumiditySensor:{name:"HumiditySensor",methods:[],properties:["humidity"]},Camera:{name:"Camera",methods:["getPictureOptions","takePicture"],properties:[]},Microphone:{name:"Microphone",methods:["getAudioStream"],properties:[]},AudioVolumeControl:{name:"AudioVolumeControl",methods:["setAudioVolumes"],properties:["audioVolumes"]},Display:{name:"Display",methods:["startDisplay","stopDisplay"],properties:[]},VideoCamera:{name:"VideoCamera",methods:["getVideoStream","getVideoStreamOptions"],properties:[]},VideoCameraMask:{name:"VideoCameraMask",methods:["getPrivacyMasks","setPrivacyMasks"],properties:[]},VideoTextOverlays:{name:"VideoTextOverlays",methods:["getVideoTextOverlays","setVideoTextOverlay"],properties:[]},VideoRecorder:{name:"VideoRecorder",methods:["getRecordingStream","getRecordingStreamCurrentTime","getRecordingStreamOptions","getRecordingStreamThumbnail"],properties:["recordingActive"]},VideoRecorderManagement:{name:"VideoRecorderManagement",methods:["deleteRecordingStream","setRecordingActive"],properties:[]},PanTiltZoom:{name:"PanTiltZoom",methods:["ptzCommand"],properties:["ptzCapabilities"]},EventRecorder:{name:"EventRecorder",methods:["getRecordedEvents"],properties:[]},VideoClips:{name:"VideoClips",methods:["getVideoClip","getVideoClips","getVideoClipThumbnail","removeVideoClips"],properties:[]},VideoCameraConfiguration:{name:"VideoCameraConfiguration",methods:["setVideoStreamOptions"],properties:[]},Intercom:{name:"Intercom",methods:["startIntercom","stopIntercom"],properties:[]},Lock:{name:"Lock",methods:["lock","unlock"],properties:["lockState"]},PasswordStore:{name:"PasswordStore",methods:["addPassword","getPasswords","removePassword"],properties:[]},Scene:{name:"Scene",methods:["activate","deactivate","isReversible"],properties:[]},Entry:{name:"Entry",methods:["closeEntry","openEntry"],properties:[]},EntrySensor:{name:"EntrySensor",methods:[],properties:["entryOpen"]},DeviceProvider:{name:"DeviceProvider",methods:["getDevice","releaseDevice"],properties:[]},DeviceDiscovery:{name:"DeviceDiscovery",methods:["adoptDevice","discoverDevices"],properties:[]},DeviceCreator:{name:"DeviceCreator",methods:["createDevice","getCreateDeviceSettings"],properties:[]},Battery:{name:"Battery",methods:[],properties:["batteryLevel"]},Charger:{name:"Charger",methods:[],properties:["chargeState"]},Reboot:{name:"Reboot",methods:["reboot"],properties:[]},Refresh:{name:"Refresh",methods:["getRefreshFrequency","refresh"],properties:[]},MediaPlayer:{name:"MediaPlayer",methods:["getMediaStatus","load","seek","skipNext","skipPrevious"],properties:[]},Online:{name:"Online",methods:[],properties:["online"]},BufferConverter:{name:"BufferConverter",methods:["convert"],properties:["fromMimeType","toMimeType"]},MediaConverter:{name:"MediaConverter",methods:["convertMedia"],properties:["converters"]},Settings:{name:"Settings",methods:["getSettings","putSetting"],properties:[]},BinarySensor:{name:"BinarySensor",methods:[],properties:["binaryState"]},TamperSensor:{name:"TamperSensor",methods:[],properties:["tampered"]},Sleep:{name:"Sleep",methods:[],properties:["sleeping"]},PowerSensor:{name:"PowerSensor",methods:[],properties:["powerDetected"]},AudioSensor:{name:"AudioSensor",methods:[],properties:["audioDetected"]},MotionSensor:{name:"MotionSensor",methods:[],properties:["motionDetected"]},AmbientLightSensor:{name:"AmbientLightSensor",methods:[],properties:["ambientLight"]},OccupancySensor:{name:"OccupancySensor",methods:[],properties:["occupied"]},FloodSensor:{name:"FloodSensor",methods:[],properties:["flooded"]},UltravioletSensor:{name:"UltravioletSensor",methods:[],properties:["ultraviolet"]},LuminanceSensor:{name:"LuminanceSensor",methods:[],properties:["luminance"]},PositionSensor:{name:"PositionSensor",methods:[],properties:["position"]},SecuritySystem:{name:"SecuritySystem",methods:["armSecuritySystem","disarmSecuritySystem"],properties:["securitySystemState"]},PM10Sensor:{name:"PM10Sensor",methods:[],properties:["pm10Density"]},PM25Sensor:{name:"PM25Sensor",methods:[],properties:["pm25Density"]},VOCSensor:{name:"VOCSensor",methods:[],properties:["vocDensity"]},NOXSensor:{name:"NOXSensor",methods:[],properties:["noxDensity"]},CO2Sensor:{name:"CO2Sensor",methods:[],properties:["co2ppm"]},AirQualitySensor:{name:"AirQualitySensor",methods:[],properties:["airQuality"]},AirPurifier:{name:"AirPurifier",methods:["setAirPurifierState"],properties:["airPurifierState"]},FilterMaintenance:{name:"FilterMaintenance",methods:[],properties:["filterChangeIndication","filterLifeLevel"]},Readme:{name:"Readme",methods:["getReadmeMarkdown"],properties:[]},OauthClient:{name:"OauthClient",methods:["getOauthUrl","onOauthCallback"],properties:[]},MixinProvider:{name:"MixinProvider",methods:["canMixin","getMixin","releaseMixin"],properties:[]},HttpRequestHandler:{name:"HttpRequestHandler",methods:["onRequest"],properties:[]},EngineIOHandler:{name:"EngineIOHandler",methods:["onConnection"],properties:[]},PushHandler:{name:"PushHandler",methods:["onPush"],properties:[]},Program:{name:"Program",methods:["run"],properties:[]},Scriptable:{name:"Scriptable",methods:["eval","loadScripts","saveScript"],properties:[]},ClusterForkInterface:{name:"ClusterForkInterface",methods:["forkInterface"],properties:[]},ObjectTracker:{name:"ObjectTracker",methods:["trackObjects"],properties:[]},ObjectDetector:{name:"ObjectDetector",methods:["getDetectionInput","getObjectTypes"],properties:[]},ObjectDetection:{name:"ObjectDetection",methods:["detectObjects","generateObjectDetections","getDetectionModel"],properties:[]},ObjectDetectionPreview:{name:"ObjectDetectionPreview",methods:[],properties:[]},ObjectDetectionGenerator:{name:"ObjectDetectionGenerator",methods:[],properties:[]},HumiditySetting:{name:"HumiditySetting",methods:["setHumidity"],properties:["humiditySetting"]},Fan:{name:"Fan",methods:["setFan"],properties:["fan"]},RTCSignalingChannel:{name:"RTCSignalingChannel",methods:["startRTCSignalingSession"],properties:[]},RTCSignalingClient:{name:"RTCSignalingClient",methods:["createRTCSignalingSession"],properties:[]},LauncherApplication:{name:"LauncherApplication",methods:[],properties:["applicationInfo"]},ScryptedUser:{name:"ScryptedUser",methods:["getScryptedUserAccessControl"],properties:[]},VideoFrameGenerator:{name:"VideoFrameGenerator",methods:["generateVideoFrames"],properties:[]},StreamService:{name:"StreamService",methods:["connectStream"],properties:[]},TTY:{name:"TTY",methods:[],properties:[]},TTYSettings:{name:"TTYSettings",methods:["getTTYSettings"],properties:[]},ScryptedSystemDevice:{name:"ScryptedSystemDevice",methods:[],properties:["systemDevice"]},ScryptedDeviceCreator:{name:"ScryptedDeviceCreator",methods:[],properties:[]},ScryptedSettings:{name:"ScryptedSettings",methods:[],properties:[]}},function(e){e.Builtin="Builtin",e.Camera="Camera",e.Fan="Fan",e.Light="Light",e.Switch="Switch",e.Outlet="Outlet",e.Sensor="Sensor",e.Scene="Scene",e.Program="Program",e.Automation="Automation",e.Vacuum="Vacuum",e.Notifier="Notifier",e.Thermostat="Thermostat",e.Lock="Lock",e.PasswordControl="PasswordControl",e.Display="Display",e.SmartDisplay="SmartDisplay",e.Speaker="Speaker",e.SmartSpeaker="SmartSpeaker",e.Event="Event",e.Entry="Entry",e.Garage="Garage",e.DeviceProvider="DeviceProvider",e.DataSource="DataSource",e.API="API",e.Doorbell="Doorbell",e.Irrigation="Irrigation",e.Valve="Valve",e.Person="Person",e.SecuritySystem="SecuritySystem",e.WindowCovering="WindowCovering",e.Siren="Siren",e.AirPurifier="AirPurifier",e.Unknown="Unknown"}(i||(t.ScryptedDeviceType=i={})),function(e){e.Humidify="Humidify",e.Dehumidify="Dehumidify",e.Auto="Auto",e.Off="Off"}(s||(t.HumidityMode=s={})),function(e){e.Auto="Auto",e.Manual="Manual"}(o||(t.FanMode=o={})),function(e){e.C="C",e.F="F"}(a||(t.TemperatureUnit=a={})),function(e){e.Off="Off",e.Cool="Cool",e.Heat="Heat",e.HeatCool="HeatCool",e.Auto="Auto",e.FanOnly="FanOnly",e.Purifier="Purifier",e.Eco="Eco",e.Dry="Dry",e.On="On"}(c||(t.ThermostatMode=c={})),function(e){e.Absolute="Absolute",e.Relative="Relative",e.Continuous="Continuous",e.Preset="Preset",e.Home="Home"}(u||(t.PanTiltZoomMovement=u={})),function(e){e.Locked="Locked",e.Unlocked="Unlocked",e.Jammed="Jammed"}(d||(t.LockState=d={})),function(e){e.Trickle="trickle",e.Charging="charging",e.NotCharging="not-charging"}(p||(t.ChargeState=p={})),function(e){e.Inactive="Inactive",e.Idle="Idle",e.Active="Active",e.ActiveNightMode="ActiveNightMode"}(l||(t.AirPurifierStatus=l={})),function(e){e.Manual="Manual",e.Automatic="Automatic"}(h||(t.AirPurifierMode=h={})),function(e){e.Unknown="Unknown",e.Excellent="Excellent",e.Good="Good",e.Fair="Fair",e.Inferior="Inferior",e.Poor="Poor"}(m||(t.AirQuality=m={})),function(e){e.Disarmed="Disarmed",e.HomeArmed="HomeArmed",e.AwayArmed="AwayArmed",e.NightArmed="NightArmed"}(f||(t.SecuritySystemMode=f={})),function(e){e.Sensor="Sensor",e.Occupied="Occupied",e.Time="Time",e.Error="Error"}(g||(t.SecuritySystemObstruction=g={})),function(e){e.Idle="Idle",e.Playing="Playing",e.Paused="Paused",e.Buffering="Buffering"}(y||(t.MediaPlayerState=y={})),function(e){e.ScryptedDevice="ScryptedDevice",e.ScryptedPlugin="ScryptedPlugin",e.ScryptedPluginRuntime="ScryptedPluginRuntime",e.OnOff="OnOff",e.Brightness="Brightness",e.ColorSettingTemperature="ColorSettingTemperature",e.ColorSettingRgb="ColorSettingRgb",e.ColorSettingHsv="ColorSettingHsv",e.Buttons="Buttons",e.PressButtons="PressButtons",e.Notifier="Notifier",e.StartStop="StartStop",e.Pause="Pause",e.Dock="Dock",e.TemperatureSetting="TemperatureSetting",e.Thermometer="Thermometer",e.HumiditySensor="HumiditySensor",e.Camera="Camera",e.Microphone="Microphone",e.AudioVolumeControl="AudioVolumeControl",e.Display="Display",e.VideoCamera="VideoCamera",e.VideoCameraMask="VideoCameraMask",e.VideoTextOverlays="VideoTextOverlays",e.VideoRecorder="VideoRecorder",e.VideoRecorderManagement="VideoRecorderManagement",e.PanTiltZoom="PanTiltZoom",e.EventRecorder="EventRecorder",e.VideoClips="VideoClips",e.VideoCameraConfiguration="VideoCameraConfiguration",e.Intercom="Intercom",e.Lock="Lock",e.PasswordStore="PasswordStore",e.Scene="Scene",e.Entry="Entry",e.EntrySensor="EntrySensor",e.DeviceProvider="DeviceProvider",e.DeviceDiscovery="DeviceDiscovery",e.DeviceCreator="DeviceCreator",e.Battery="Battery",e.Charger="Charger",e.Reboot="Reboot",e.Refresh="Refresh",e.MediaPlayer="MediaPlayer",e.Online="Online",e.BufferConverter="BufferConverter",e.MediaConverter="MediaConverter",e.Settings="Settings",e.BinarySensor="BinarySensor",e.TamperSensor="TamperSensor",e.Sleep="Sleep",e.PowerSensor="PowerSensor",e.AudioSensor="AudioSensor",e.MotionSensor="MotionSensor",e.AmbientLightSensor="AmbientLightSensor",e.OccupancySensor="OccupancySensor",e.FloodSensor="FloodSensor",e.UltravioletSensor="UltravioletSensor",e.LuminanceSensor="LuminanceSensor",e.PositionSensor="PositionSensor",e.SecuritySystem="SecuritySystem",e.PM10Sensor="PM10Sensor",e.PM25Sensor="PM25Sensor",e.VOCSensor="VOCSensor",e.NOXSensor="NOXSensor",e.CO2Sensor="CO2Sensor",e.AirQualitySensor="AirQualitySensor",e.AirPurifier="AirPurifier",e.FilterMaintenance="FilterMaintenance",e.Readme="Readme",e.OauthClient="OauthClient",e.MixinProvider="MixinProvider",e.HttpRequestHandler="HttpRequestHandler",e.EngineIOHandler="EngineIOHandler",e.PushHandler="PushHandler",e.Program="Program",e.Scriptable="Scriptable",e.ClusterForkInterface="ClusterForkInterface",e.ObjectTracker="ObjectTracker",e.ObjectDetector="ObjectDetector",e.ObjectDetection="ObjectDetection",e.ObjectDetectionPreview="ObjectDetectionPreview",e.ObjectDetectionGenerator="ObjectDetectionGenerator",e.HumiditySetting="HumiditySetting",e.Fan="Fan",e.RTCSignalingChannel="RTCSignalingChannel",e.RTCSignalingClient="RTCSignalingClient",e.LauncherApplication="LauncherApplication",e.ScryptedUser="ScryptedUser",e.VideoFrameGenerator="VideoFrameGenerator",e.StreamService="StreamService",e.TTY="TTY",e.TTYSettings="TTYSettings",e.ScryptedSystemDevice="ScryptedSystemDevice",e.ScryptedDeviceCreator="ScryptedDeviceCreator",e.ScryptedSettings="ScryptedSettings"}(v||(t.ScryptedInterface=v={})),function(e){e.Url="text/x-uri",e.InsecureLocalUrl="text/x-insecure-local-uri",e.LocalUrl="text/x-local-uri",e.ServerId="text/x-server-id",e.PushEndpoint="text/x-push-endpoint",e.SchemePrefix="x-scrypted/x-scrypted-scheme-",e.MediaStreamUrl="text/x-media-url",e.MediaObject="x-scrypted/x-scrypted-media-object",e.RequestMediaObject="x-scrypted/x-scrypted-request-media-object",e.RequestMediaStream="x-scrypted/x-scrypted-request-stream",e.MediaStreamFeedback="x-scrypted/x-media-stream-feedback",e.FFmpegInput="x-scrypted/x-ffmpeg-input",e.FFmpegTranscodeStream="x-scrypted/x-ffmpeg-transcode-stream",e.RTCSignalingChannel="x-scrypted/x-scrypted-rtc-signaling-channel",e.RTCSignalingSession="x-scrypted/x-scrypted-rtc-signaling-session",e.RTCConnectionManagement="x-scrypted/x-scrypted-rtc-connection-management",e.Image="x-scrypted/x-scrypted-image"}(S||(t.ScryptedMimeTypes=S={}))},3716:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.onvifAutoConfigureSettings=t.automaticallyConfigureSettings=void 0,t.checkPluginNeedsAutoConfigure=async function(e,t=0){if("true"===e.storage.getItem("autoconfigure"))return;if(e.storage.setItem("autoconfigure","true"),i.default.deviceManager.getNativeIds().length<=1+t)return;e.log.a(`${e.name} now has support for automatic camera configuration for optimal performance. Cameras can be autoconfigured in their respective settings.`)},t.autoconfigureCodecs=async function(e,t,r){r||={codec:"pcm_mulaw",bitrate:64e3,sampleRate:8e3};const n=await e(),i=[];for(const e of n){const r=await t({id:e.id});i.push(r)}const a=[];for(const e of["local","remote","low-resolution"]){let e=[void 0,0];for(const t of i)if(!a.includes(t))for(const r of t.video.resolutions)r[0]*r[1]>e[1]&&(e=[t,r[0]*r[1]]);const t=e[0];if(!t)break;a.push(t)}const c=(e,t,r)=>{let n,i=999999999;const s=t*r;for(const t of e.video.resolutions){const e=t[0]*t[1],r=Math.abs(s-e);r<i&&(i=r,n=t)}return n},u=a[0],d=c(u,8192,8192);let p=Math.min(20,Math.max(...u.video.fpsRange)),l="";const h=async e=>{try{await t(e)}catch(e){l+=e}};if(await h({id:u.id,video:{width:d[0],height:d[1],bitrateControl:"variable",codec:"h264",bitrate:o(d[0]*d[1]),fps:p,keyframeInterval:4*p,quality:5,profile:"main"},audio:r}),3===a.length){const e=a[1],t=a[2],n=c(e,1280,720),i=c(t,640,360);p=Math.min(20,Math.max(...e.video.fpsRange)),await h({id:e.id,video:{width:n[0],height:n[1],bitrateControl:"variable",codec:"h264",bitrate:1*s,fps:p,keyframeInterval:4*p,quality:5,profile:"main"},audio:r}),p=Math.min(20,Math.max(...t.video.fpsRange)),await h({id:t.id,video:{width:i[0],height:i[1],bitrateControl:"variable",codec:"h264",bitrate:s/2,fps:p,keyframeInterval:4*p,quality:5,profile:"main"},audio:r})}else if(2==a.length){let e;e=d[0]*d[1]>2073600?[1280,720]:[640,360];const t=c(a[1],e[0],e[1]),n=Math.min(20,Math.max(...a[1].video.fpsRange));await h({id:a[1].id,video:{width:t[0],height:t[1],bitrateControl:"variable",codec:"h264",bitrate:o(t[0]*t[1]),fps:n,keyframeInterval:4*n,quality:5,profile:"main"},audio:r})}else a.length;if(l)throw new Error(l)};const i=n(r(2743));t.automaticallyConfigureSettings={key:"autoconfigure",title:"Automatically Configure Settings",description:"Automatically configure and valdiate the camera codecs and other settings for optimal Scrypted performance. Some settings will require manual configuration via the camera web admin.",type:"boolean",value:!0},t.onvifAutoConfigureSettings={key:"onvif-autoconfigure",type:"html",value:'ONVIF autoconfiguration will configure the camera codecs. <b>The camera motion sensor must still be <a target="_blank" href="https://docs.scrypted.app/camera-preparation.html#motion-sensor-setup">configured manually</a>.</b>'};const s=1024e3;function o(e){return e>=8294400?8*s:e>=4085760?3*s:e>=2073600?2*s:e>=921600?s:e>=307200?s/2:s/4}},1251:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.authHttpFetch=void 0;const n=r(9049),i=r(3750);t.authHttpFetch=(0,i.createAuthFetch)(n.httpFetch,n.httpFetchParseIncomingMessage)},3515:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.listenZeroSingleClient=t.listenZero=t.ListenZeroSingleClientTimeoutError=void 0,t.closeQuiet=o,t.bindUdp=a,t.bindZero=async function(e){return a(e,0)},t.createBindZero=c,t.createSquentialBindZero=async function(e){let t=0;for(;;){const r=await c(e);try{return[r,await u(r.port+1,e)]}catch(e){t++,o(r.server)}if(10===t)throw new Error("unable to reserve sequential udp ports")}},t.reserveUdpPort=async function(){const e=await c();return await new Promise((t=>e.server.close((()=>t(void 0))))),e.port},t.createBindUdp=u,t.bind=async function(e,t){return e.bind(t),await(0,s.once)(e,"listening"),{port:t,url:`udp://127.0.0.1:${t}`}};const i=n(r(7194)),s=r(4434);async function o(e){if(e)try{await new Promise(((t,r)=>{try{e.close(t)}catch(e){r(e)}}))}catch(e){}}async function a(e,t,r){e.bind(t,r),await(0,s.once)(e,"listening");const n=e.address().port;return{port:n,url:`udp://127.0.0.1:${n}`}}async function c(e){return u(0,e)}async function u(e,t){const r=i.default.createSocket(t||"udp4"),{port:n,url:s}=await a(r,e);return{server:r,port:n,url:s}}var d=r(8649);Object.defineProperty(t,"ListenZeroSingleClientTimeoutError",{enumerable:!0,get:function(){return d.ListenZeroSingleClientTimeoutError}}),Object.defineProperty(t,"listenZero",{enumerable:!0,get:function(){return d.listenZero}}),Object.defineProperty(t,"listenZeroSingleClient",{enumerable:!0,get:function(){return d.listenZeroSingleClient}})},3643:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.safePrintFFmpegArguments=t.ffmpegLogInitialOutput=t.safeKillFFmpeg=void 0;var n=r(2989);Object.defineProperty(t,"safeKillFFmpeg",{enumerable:!0,get:function(){return n.safeKillFFmpeg}}),Object.defineProperty(t,"ffmpegLogInitialOutput",{enumerable:!0,get:function(){return n.ffmpegLogInitialOutput}}),Object.defineProperty(t,"safePrintFFmpegArguments",{enumerable:!0,get:function(){return n.safePrintFFmpegArguments}})},3422:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TimeoutError=void 0,t.singletonPromise=function(e,t,r=0){if(e?.promise)return e;const n=t();e?e.promise=n:e={promise:n,cacheDuration:r};return n.finally((()=>setTimeout((()=>e.promise=void 0),e.cacheDuration))),e},t.timeoutPromise=function(e,t){return new Promise(((n,i)=>{const s=setTimeout((()=>i(new r(t))),e);t.then((e=>{clearTimeout(s),n(e)})).catch((e=>{clearTimeout(s),i(e)}))}))},t.timeoutFunction=function(e,t){return new Promise(((n,i)=>{let s=!1;const o=t((()=>s)),a=setTimeout((()=>{s=!0,i(new r(o))}),e);o.then((e=>{clearTimeout(a),n(e)})).catch((e=>{clearTimeout(a),i(e)}))}))},t.createPromiseDebouncer=function(){let e;return t=>(e||(e=t().finally((()=>e=void 0))),e)},t.createMapPromiseDebouncer=function(){const e=new Map;return(t,r,n)=>{const i=JSON.stringify(t);let s=e.get(i);return s||(s=n().finally((()=>{r?setTimeout((()=>e.delete(i)),r):e.delete(i)})),e.set(i,s)),s}};class r extends Error{constructor(e){super("Operation Timed Out"),this.promise=e}}t.TimeoutError=r},8460:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamEndError=void 0,t.read16BELengthLoop=async function(e,t){let r;const{skipHeader:s,callback:o}=t,a=t.offset||0,c=t.headerLength||2;let u,d;e.on("error",(e=>r=e));let p=0,l=0;const h=()=>{l++,m()},m=()=>{for(;;){if(p!==l)return;if(u){const t=e.read(d);if(!t)return;o(u,t),u=void 0}else{if(u=e.read(c),!u)return;if(s?.(u,h)){p++,u=void 0;continue}d=u.readUInt16BE(a)}}};throw m(),e.on("readable",m),await(0,n.once)(e,"end"),new i("read16BELengthLoop")},t.readLength=async function(e,t){if(e.readableEnded||e.destroyed)throw new i("readLength start");if(!t)return Buffer.alloc(0);{const r=e.read(t);if(r)return r}return new Promise(((r,n)=>{const s=()=>{const s=e.read(t);if(s)return a(),void r(s);(e.readableEnded||e.destroyed)&&n(new i("readLength readable"))},o=()=>{a(),n(new i("readLength end"))},a=()=>{e.removeListener("readable",s),e.removeListener("end",o)};e.on("readable",s),e.on("end",o)}))},t.readUntil=o,t.readLine=async function(e){return o(e,s)},t.readString=async function(e){return(await a(e)).toString()},t.readBuffer=a;const n=r(4434);class i extends Error{constructor(e){super(`stream ended: ${e}`)}}t.StreamEndError=i;const s="\n".charCodeAt(0);async function o(e,t){const r=[];for(;;){const i=e.read();if(!i){await(0,n.once)(e,"readable");continue}const s=i.findIndex((e=>e===t));if(-1===s){r.push(i);continue}const o=i.subarray(0,s);r.push(o);const a=i.subarray(s+1);return e.unshift(a),Buffer.concat(r).toString()}}async function a(e){const t=[];return(e=await e).on("data",(e=>{t.push(e)})),e.resume(),await(0,n.once)(e,"end"),Buffer.concat(t)}},336:function(e,t,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&n(t,e,r);return i(t,e),t},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RtspServer=t.RtspClient=t.RtspBase=t.RtspStatusError=t.H265_NAL_TYPE_IDR_W=t.H265_NAL_TYPE_IDR_N=t.H265_NAL_TYPE_PPS=t.H265_NAL_TYPE_SPS=t.H265_NAL_TYPE_VPS=t.H265_NAL_TYPE_AGG=t.H264_NAL_TYPE_MTAP32=t.H264_NAL_TYPE_MTAP16=t.H264_NAL_TYPE_FU_B=t.H264_NAL_TYPE_FU_A=t.H264_NAL_TYPE_STAP_B=t.H264_NAL_TYPE_STAP_A=t.H264_NAL_TYPE_PPS=t.H264_NAL_TYPE_SPS=t.H264_NAL_TYPE_SEI=t.H264_NAL_TYPE_IDR=t.H264_NAL_TYPE_RESERVED31=t.H264_NAL_TYPE_RESERVED30=t.H264_NAL_TYPE_RESERVED0=t.RTSP_FRAME_MAGIC=void 0,t.readMessage=S,t.readBody=w,t.writeMessage=b,t.findH264NaluType=function(e,t){if("h264"!==e.type)return;return P(e.chunks[e.chunks.length-1].subarray(12),t)},t.findH265NaluType=function(e,t){if("h265"!==e.type)return;return T(e.chunks[e.chunks.length-1].subarray(12),t)},t.parseH264NaluType=_,t.findH264NaluTypeInNalu=P,t.findH265NaluTypeInNalu=T,t.getNaluTypes=E,t.getNaluTypesInNalu=A,t.getH265NaluTypes=I,t.getNaluTypesInH265Nalu=O,t.createRtspParser=function(e){let r;return{container:"rtsp",tcpProtocol:"rtsp://127.0.0.1/"+(0,a.randomBytes)(8).toString("hex"),inputArguments:["-rtsp_transport","tcp"],outputArguments:["-rtsp_transport","tcp",...e?.vcodec||[],...e?.acodec||[],"-pkt_size","32000","-f","rtsp"],findSyncFrame(e){for(let r=0;r<e.length;r++){const n=e[r];if("h264"===n.type){const i=E(n);if(i.has(t.H264_NAL_TYPE_SPS)||i.has(t.H264_NAL_TYPE_IDR))return e.slice(r)}else if("h265"===n.type){const i=I(n);if(i.has(t.H265_NAL_TYPE_VPS)||i.has(t.H265_NAL_TYPE_SPS)||i.has(t.H265_NAL_TYPE_PPS)||i.has(t.H265_NAL_TYPE_IDR_N)||i.has(t.H265_NAL_TYPE_IDR_W))return e.slice(r)}}},sdp:new Promise((e=>r=e)),async*parse(e,t,n){const i=new B(e);await i.handleSetup(),r(i.sdp);for await(const{type:e,rtcp:r,header:s,packet:o}of i.handleRecord())yield{chunks:[s,o],type:`${r?"rtcp-":""}${e}`,width:t,height:n}}}},t.parseHeaders=R,t.getFirstAuthenticateHeader=D,t.parseSemicolonDelimited=M,t.listenSingleRtspClient=async function(e){const t=e?.pathToken||a.default.randomBytes(8).toString("hex");let{url:r,clientPromise:n,server:i}=await(0,h.listenZeroSingleClient)(e?.hostname);const s="/"+t;r=r.replace("tcp:","rtsp:")+s;const o=n.then((t=>{const r=(e?.createServer||(e=>new B(e)))(t);return r.checkRequest=async(e,t,n,i)=>{r.checkRequest=void 0;return new p.URL(t).pathname===s},r}));return{url:r,rtspServerPromise:o,server:i}};const a=s(r(6982)),c=r(4434),u=o(r(9278)),d=o(r(4756)),p=r(7016),l=r(3290),h=r(3515),m=r(3422),f=r(8460),g=r(4890),y=r(7724),v=["realm","nonce"];async function S(e){let t=[];for(;;){let r=await(0,f.readLine)(e);if(r=r.trim(),!r)return t;t.push(r)}}async function w(e,t){const r=parseInt(t["content-length"]);if(r)return(0,f.readLength)(e,r)}function b(e,t,r,n,i){let s=void 0!==t?`${t}\r\n`:"";r&&(n["Content-Length"]=r.length.toString());for(const[e,t]of Object.entries(n))s+=`${e}: ${t}\r\n`;s+="\r\n",e.write(s),i?.log("rtsp outgoing message\n",s),i?.log(),r&&e.write(r)}function _(e){return 31&e}function P(e,r){const n=_(e[0]);if(n===t.H264_NAL_TYPE_STAP_A){let t=1;for(;t<e.length;){const n=e.readUInt16BE(t);t+=2;if(_(e[t])===r)return e.subarray(t,t+n);t+=n}}else if(n===t.H264_NAL_TYPE_FU_A){const t=_(e[1]),n=!!(128&e[1]);if(t===r&&n)return e.subarray(1)}else if(n===r)return e}function C(e){return(126&e)>>1}function T(e,r){const n=C(e[0]);if(n===t.H265_NAL_TYPE_AGG){let t=1;for(;t<e.length;){const n=e.readUInt16BE(t);t+=2;if(C(e[t])===r)return e.subarray(t,t+n);t+=n}}else if(n===r)return e}function E(e){return"h264"!==e.type?new Set:A(e.chunks[e.chunks.length-1].subarray(12))}function A(e,r=!1,n=!1){const i=new Set,s=_(e[0]);if(s===t.H264_NAL_TYPE_STAP_A){i.add(t.H264_NAL_TYPE_STAP_A);let r=1;for(;r<e.length;){const t=e.readUInt16BE(r);r+=2;const n=_(e[r]);i.add(n),r+=t}}else if(s===t.H264_NAL_TYPE_FU_A){i.add(t.H264_NAL_TYPE_FU_A);const s=_(e[1]);if(r){!!(128&e[1])&&i.add(s)}else if(n){!!(64&e[1])&&i.add(s)}else i.add(s)}else i.add(s);return i}function I(e){return"h265"!==e.type?new Set:O(e.chunks[e.chunks.length-1].subarray(12))}function O(e,r=!1,n=!1){const i=new Set,s=C(e[0]);if(s===t.H265_NAL_TYPE_AGG){i.add(t.H265_NAL_TYPE_AGG);let r=1;for(;r<e.length;){const t=e.readUInt16BE(r);r+=2;const n=C(e[r]);i.add(n),r+=t}}else i.add(s);return i}function R(e){const t={};for(const r of e.slice(1)){const e=r.indexOf(":");let n="";-1!==e&&(n=r.substring(e+1).trim());t[r.substring(0,e).toLowerCase()]=n}return t}function D(e){for(const t of e.slice(1)){const e=t.indexOf(":");let r="";-1!==e&&(r=t.substring(e+1).trim());if("www-authenticate"===t.substring(0,e).toLowerCase())return r}}function M(e){const t={};for(const r of e.split(";")){const[e,n]=r.split("=",2);t[e]=n}return t}t.RTSP_FRAME_MAGIC=36,t.H264_NAL_TYPE_RESERVED0=0,t.H264_NAL_TYPE_RESERVED30=30,t.H264_NAL_TYPE_RESERVED31=31,t.H264_NAL_TYPE_IDR=5,t.H264_NAL_TYPE_SEI=6,t.H264_NAL_TYPE_SPS=7,t.H264_NAL_TYPE_PPS=8,t.H264_NAL_TYPE_STAP_A=24,t.H264_NAL_TYPE_STAP_B=25,t.H264_NAL_TYPE_FU_A=28,t.H264_NAL_TYPE_FU_B=29,t.H264_NAL_TYPE_MTAP16=26,t.H264_NAL_TYPE_MTAP32=27,t.H265_NAL_TYPE_AGG=48,t.H265_NAL_TYPE_VPS=32,t.H265_NAL_TYPE_SPS=33,t.H265_NAL_TYPE_PPS=34,t.H265_NAL_TYPE_IDR_N=19,t.H265_NAL_TYPE_IDR_W=20;class k extends Error{constructor(e){super(`RTSP Error: ${e.line}`),this.status=e}}t.RtspStatusError=k;class x{constructor(){}write(e,t,r){b(this.client,e,r,t,this.console)}async readMessage(){const e=await S(this.client);return this.console?.log("rtsp incoming message\n",e.join("\n")),this.console?.log(),e}}t.RtspBase=x;t.RtspClient=class extends x{constructor(e){super(),this.url=e,this.cseq=0,this.needKeepAlive=!1,this.setupOptions=new Map,this.issuedTeardown=!1,this.hasGetParameter=!0;const t=new p.URL(e),r=parseInt(t.port)||554;e.startsWith("rtsps")?this.client=d.default.connect({rejectUnauthorized:!1,port:r,host:t.hostname}):this.client=u.default.connect(r,t.hostname),this.client.on("error",(e=>{this.console?.log("client error",e)}))}async safeTeardown(){if(!this.issuedTeardown){this.issuedTeardown=!0;try{this.writeTeardown(),await(0,y.sleep)(500)}catch(e){}finally{this.client.destroy()}}}async writeRequest(e,t,r,n){let i;t=t||{},r?r.includes("rtsp://")||r.includes("rtsps://")||"*"===r?i=r:(i=this.contentBase||this.url,i+=(i.endsWith("/")?"":"/")+r):i=this.url;const s=new p.URL(i);s.username="",s.password="";const o=`${e} ${s} RTSP/1.0`,a=this.cseq++;t.CSeq=a.toString(),t["User-Agent"]="Scrypted",this.wwwAuthenticate&&(t.Authorization=await this.createAuthorizationHeader(e,new p.URL(i))),this.session&&(t.Session=this.session),this.write(o,t,n)}async handleDataPayload(e){if(e[0]!==t.RTSP_FRAME_MAGIC)throw new Error("RTSP Client received invalid frame magic. This may be a bug in your camera firmware. If this error persists, switch your RTSP Parser to FFmpeg or Scrypted (UDP): "+e.toString());const r=e.readUInt8(1),n=e.readUInt16BE(2),i=await(0,f.readLength)(this.client,n),s=this.setupOptions.get(r);s?.onRtp?.(e,i)}async readDataPayload(){const e=await(0,f.readLength)(this.client,4);return this.handleDataPayload(e)}createBadHeader(e){return new Error("RTSP Client received invalid frame magic. This may be a bug in your camera firmware. If this error persists, switch your RTSP Parser to FFmpeg or Scrypted (UDP): "+e.toString())}async readLoopLegacy(){try{for(;;)this.needKeepAlive&&(this.needKeepAlive=!1,this.hasGetParameter?await this.getParameter():await this.options()),await this.readDataPayload()}catch(e){throw this.client.destroy(e),e}}async*handleStream(){for(;;){const e=await(0,f.readLength)(this.client,4);if(e[0]!==t.RTSP_FRAME_MAGIC){if("RTSP"!==e.toString())throw this.createBadHeader(e);this.client.unshift(e);const t=await super.readMessage();await this.readBody(R(t));continue}const r=e.readUInt16BE(2),n=await(0,f.readLength)(this.client,r),i=e.readUInt8(1);yield{channel:i,rtcp:i%2==1,header:e,packet:n}}}async readLoop(){const e=new l.Deferred;let r,n,i;const s=async()=>{this.needKeepAlive&&(this.needKeepAlive=!1,this.hasGetParameter?this.writeGetParameter():this.writeOptions());try{for(;;){if(!r){if(r=this.client.read(4),!r)return;if(r[0]!==t.RTSP_FRAME_MAGIC){if("RTSP"!==r.toString())throw this.createBadHeader(r);this.client.unshift(r),r=void 0,this.client.removeListener("readable",s);const e=await super.readMessage();await this.readBody(R(e));this.client.on("readable",s);continue}n=r.readUInt8(1),i=r.readUInt16BE(2)}const e=this.client.read(i);if(!e)return;const o=r;r=void 0;const a=this.setupOptions.get(n);a?.onRtp?.(o,e)}}catch(t){e.finished||e.reject(t),this.client.destroy()}};s(),this.client.on("readable",s),await Promise.all([(0,c.once)(this.client,"end")])}async readMessage(){for(;;){const e=await(0,f.readLength)(this.client,4);if(e[0]!==t.RTSP_FRAME_MAGIC){if("RTSP"===e.toString()){this.client.unshift(e);return await super.readMessage()}throw this.createBadHeader(e)}await this.handleDataPayload(e)}}async createAuthorizationHeader(e,t){if(!this.wwwAuthenticate)throw new Error("no WWW-Authenticate found");const{BASIC:n}=await Promise.resolve().then(r.bind(r,7284)),{parseHTTPHeadersQuotedKeyValueSet:i}=await Promise.resolve().then(r.bind(r,2238));if(this.wwwAuthenticate.includes("Basic")){const e=new p.URL(this.url);return`Basic ${n.computeHash({username:e.username,password:e.password})}`}const s=i(this.wwwAuthenticate,{indexOf:()=>0},v),o=new p.URL(this.url),c=decodeURIComponent(o.username),u=decodeURIComponent(o.password),d=new p.URL(t.toString());d.username="",d.password="";const l=a.default.createHash("md5").update(`${c}:${s.realm}:${u}`).digest("hex"),h=a.default.createHash("md5").update(`${e}:${d}`).digest("hex"),m=a.default.createHash("md5").update(`${l}:${s.nonce}:${h}`