diff --git a/Dockerfile b/Dockerfile index dc0ede43..e0b40bde 100644 --- a/Dockerfile +++ b/Dockerfile @@ -100,8 +100,8 @@ RUN sed -i -e 's/\r//g' /home/Shinobi/Docker/init.sh VOLUME ["/home/Shinobi/videos"] VOLUME ["/home/Shinobi/plugins"] +VOLUME ["/home/Shinobi/libs/customAutoLoad"] VOLUME ["/config"] -VOLUME ["/customAutoLoad"] VOLUME ["/var/lib/mysql"] EXPOSE 8080 443 21 25 diff --git a/Dockerfile.arm32v7 b/Dockerfile.arm32v7 index e7bd2698..c85896f6 100644 --- a/Dockerfile.arm32v7 +++ b/Dockerfile.arm32v7 @@ -98,8 +98,8 @@ RUN chmod -f +x /home/Shinobi/Docker/init.sh VOLUME ["/home/Shinobi/videos"] VOLUME ["/home/Shinobi/plugins"] +VOLUME ["/home/Shinobi/libs/customAutoLoad"] VOLUME ["/config"] -VOLUME ["/customAutoLoad"] VOLUME ["/var/lib/mysql"] EXPOSE 8080 diff --git a/Dockerfile.nvidia b/Dockerfile.nvidia index 0a06510b..10ac76ef 100644 --- a/Dockerfile.nvidia +++ b/Dockerfile.nvidia @@ -107,8 +107,8 @@ RUN sed -i -e 's/\r//g' /home/Shinobi/Docker/init.sh VOLUME ["/home/Shinobi/videos"] VOLUME ["/home/Shinobi/plugins"] +VOLUME ["/home/Shinobi/libs/customAutoLoad"] VOLUME ["/config"] -VOLUME ["/customAutoLoad"] VOLUME ["/var/lib/mysql"] EXPOSE 8080 443 21 25 diff --git a/INSTALL/CentOS - Quick Install.sh b/INSTALL/CentOS - Quick Install.sh index b45014a5..614de9b9 100644 --- a/INSTALL/CentOS - Quick Install.sh +++ b/INSTALL/CentOS - Quick Install.sh @@ -125,7 +125,7 @@ if [ "${ffmpeginstall^}" = "Y" ]; then elif [ "$version" = 8 ]; then #Enable Negativo17 repo for FFMPEG (CentOS 8) sudo dnf install epel-release dnf-utils -y -q -e 0 - sudo yum-config-manager --set-enabled PowerTools + sudo yum-config-manager --set-enabled powertools sudo yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo sudo dnf install ffmpeg ffmpeg-devel -y -q -e 0 fi @@ -148,7 +148,7 @@ if [ "${installdbserver^}" = "Y" ] || [ "${installdbserver^}" = "" ]; then if [ "${securedbserver^}" = "Y" ]; then #Configure basic security for MariaDB - sudo mysql_secure_installation + sudo mariadb-secure-installation else echo "=========================================================" echo "Skipping database server security configuration..." diff --git a/INSTALL/centos.sh b/INSTALL/centos.sh index 4c8d7a77..15a61ea2 100644 --- a/INSTALL/centos.sh +++ b/INSTALL/centos.sh @@ -76,7 +76,7 @@ if [ "$mysqlagree" = "y" ] || [ "$mysqlagree" = "Y" ]; then sudo systemctl start mariadb sudo systemctl enable mariadb #Run mysql install - sudo mysql_secure_installation + sudo mariadb-secure-installation fi echo "=============" echo "Shinobi - Database Installation" diff --git a/INSTALL/cuda-11.sh b/INSTALL/cuda-11.sh new file mode 100644 index 00000000..7abf11de --- /dev/null +++ b/INSTALL/cuda-11.sh @@ -0,0 +1,36 @@ +#!/bin/sh +echo "------------------------------------------" +echo "-- Installing CUDA Toolkit and CUDA DNN --" +echo "------------------------------------------" +# Install CUDA Drivers and Toolkit +if [ -x "$(command -v apt)" ]; then + wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin + sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 + wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb + sudo dpkg -i cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb + sudo apt-key add /var/cuda-repo-ubuntu2004-11-0-local/7fa2af80.pub + + sudo apt-get update -y + + sudo apt-get -o Dpkg::Options::="--force-overwrite" install cuda-toolkit-11-0 -y --no-install-recommends + sudo apt-get -o Dpkg::Options::="--force-overwrite" install --fix-broken -y + sudo apt install nvidia-utils-495 nvidia-headless-495 -y + + # Install CUDA DNN + wget https://cdn.shinobi.video/installers/libcudnn8_8.2.1.32-1+cuda11.3_amd64.deb -O cuda-dnn.deb + sudo dpkg -i cuda-dnn.deb + wget https://cdn.shinobi.video/installers/libcudnn8-dev_8.2.0.53-1+cuda11.3_amd64.deb -O cuda-dnn-dev.deb + sudo dpkg -i cuda-dnn-dev.deb + echo "-- Cleaning Up --" + # Cleanup + sudo rm cuda-dnn.deb + sudo rm cuda-dnn-dev.deb +fi +echo "------------------------------" +echo "Reboot is required. Do it now?" +echo "------------------------------" +echo "(y)es or (N)o. Default is No." +read rebootTheMachineHomie +if [ "$rebootTheMachineHomie" = "y" ] || [ "$rebootTheMachineHomie" = "Y" ]; then + sudo reboot +fi diff --git a/cron.js b/cron.js index ad9eb97b..414136e0 100644 --- a/cron.js +++ b/cron.js @@ -92,8 +92,8 @@ const deleteVideo = (x) => { const deleteFileBinEntry = (x) => { postMessage({f:'s.deleteFileBinEntry',file:x}) } -const setDiskUsedForGroup = (groupKey,size,target) => { - postMessage({f:'s.setDiskUsedForGroup', ke: groupKey, size: size, target: target}) +const setDiskUsedForGroup = (groupKey,size,target,videoRow) => { + postMessage({f:'s.setDiskUsedForGroup', ke: groupKey, size: size, target: target, videoRow: videoRow}) } const getVideoDirectory = function(e){ if(e.mid&&!e.id){e.id=e.mid}; @@ -185,6 +185,7 @@ const checkFilterRules = function(v){ }) } const deleteVideosByDays = async (v,days,addedQueries) => { + const groupKey = v.ke; const whereQuery = [ ['ke','=',v.ke], ['time','<', sqlDate(days+' DAY')], @@ -207,7 +208,8 @@ const deleteVideosByDays = async (v,days,addedQueries) => { const filename = formattedTime(row.time) + '.' + row.ext try{ await fs.promises.unlink(dir + filename) - row.size += clearSize + const fileSizeMB = row.size / 1048576; + setDiskUsedForGroup(groupKey,-fileSizeMB,null,row) sendToWebSocket({ f: 'video_delete', filename: filename + '.' + row.ext, @@ -227,7 +229,6 @@ const deleteVideosByDays = async (v,days,addedQueries) => { where: whereQuery }) affectedRows = deleteResponse.rows || 0 - setDiskUsedForGroup(v.ke,-clearSize) } return { ok: true, diff --git a/definitions/en_CA.js b/definitions/en_CA.js index f695b47a..60a826d3 100644 --- a/definitions/en_CA.js +++ b/definitions/en_CA.js @@ -120,6 +120,7 @@ module.exports = function(s,config,lang){ { "fieldType": 'div', "id": "monitorPresetsSelection", + "style": "max-height:400px;overflow:auto;", "class": "mdl-list" }, { @@ -497,23 +498,23 @@ module.exports = function(s,config,lang){ "form-group-class": "input-mapping", "possible": [ { - "name": lang['All streams in first feed'] + '(0, ' + lang.Default + ')', + "name": lang['All streams in first feed'] + ' (0, ' + lang.Default + ')', "value": "0" }, { - "name": lang['First stream in feed'] + '(0:0)', + "name": lang['First stream in feed'] + ' (0:0)', "value": "0:0" }, { - "name": lang['Second stream in feed'] + "(0:1)", + "name": lang['Second stream in feed'] + " (0:1)", "value": "0:1" }, { - "name": lang['Video streams only'] + "(0:v)", + "name": lang['Video streams only'] + " (0:v)", "value": "0:v" }, { - "name": lang['Video stream only from first feed'] + "(0:v:0)", + "name": lang['Video stream only from first feed'] + " (0:v:0)", "value": "0:v:0" } ] @@ -764,6 +765,10 @@ module.exports = function(s,config,lang){ "name": lang['HLS (includes Audio)'], "value": "hls", "info": "Similar method to facebook live streams. Includes audio if input provides it. There is a delay of about 4-6 seconds because this method records segments then pushes them to the client rather than push as while it creates them." + }, + { + "name": lang.useSubStreamOnlyWhenWatching, + "value": "useSubstream", } ] }, @@ -1285,16 +1290,20 @@ module.exports = function(s,config,lang){ isAdvanced: true, "isSection": true, "id": "monSectionSubstream", + "blockquote": lang.substreamText, + "blockquoteClass": 'global_tip', "info": [ { "name": lang['Connection'], "color": "orange", id: "monSectionSubstreamInput", + "blockquote": lang.substreamConnectionText, + "blockquoteClass": 'global_tip', isSection: true, isFormGroupGroup: true, "info": [ { - name:'map-detail=type', + name:'detail-substream-input=type', field:lang['Input Type'], default:'h264', attribute:'selector="h_i_SUBSTREAM_FIELDS"', @@ -1303,7 +1312,8 @@ module.exports = function(s,config,lang){ possible:[ { "name": "H.264 / H.265 / H.265+", - "value": "h264" + "value": "h264", + selected: true, }, { "name": "JPEG", @@ -1371,6 +1381,7 @@ module.exports = function(s,config,lang){ { "name": lang.Yes, "value": "1", + selected: true, } ] }, @@ -1385,7 +1396,8 @@ module.exports = function(s,config,lang){ { "name": lang.Auto, "value": "", - "info": "Let FFMPEG decide. Normally it will try UDP first." + "info": "Let FFMPEG decide. Normally it will try UDP first.", + selected: true, }, { "name": "TCP", @@ -1410,6 +1422,7 @@ module.exports = function(s,config,lang){ { "name": lang.No, "value": "0", + selected: true, }, { "name": lang.Yes, @@ -1438,7 +1451,8 @@ module.exports = function(s,config,lang){ possible:[ { "name": lang.Auto + '('+lang.Recommended+')', - "value": "" + "value": "", + selected: true, }, { "name": lang.NVIDIA, @@ -1516,6 +1530,8 @@ module.exports = function(s,config,lang){ "name": lang['Output'], "color": "blue", id: "monSectionSubstreamOutput", + "blockquote": lang.substreamOutputText, + "blockquoteClass": 'global_tip', isSection: true, isFormGroupGroup: true, "info": [ @@ -1531,41 +1547,22 @@ module.exports = function(s,config,lang){ { "name": lang.Poseidon, "value": "mp4", - "info": "Poseidon is built on Kevin Godell's MP4 processing code. It simulates a streaming MP4 file but using the data of a live stream. Includes Audio. Some browsers can play it like a regular MP4 file. Streams over HTTP or WebSocket." - }, - { - "name": lang["RTMP Stream"], - "value": "rtmp", }, { "name": lang['MJPEG'], "value": "mjpeg", - "info": "Standard Motion JPEG image. No audio." }, { "name": lang['FLV'], "value": "flv", - "info": "Sending FLV encoded frames over WebSocket." }, { "name": lang['HLS (includes Audio)'], "value": "hls", - "info": "Similar method to facebook live streams. Includes audio if input provides it. There is a delay of about 4-6 seconds because this method records segments then pushes them to the client rather than push as while it creates them." + selected: true, } ] }, - { - "field": lang['Server URL'], - "name": `detail-substream-output="rtmp_server_url"`, - "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_rtmp", - "example": "rtmp://live-api.facebook.com:80/rtmp/", - }, - { - "field": lang['Stream Key'], - "name": `detail-substream-output="rtmp_stream_key"`, - "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_rtmp", - "example": "1111111111?ds=1&a=xxxxxxxxxx", - }, { "field": lang['# of Allow MJPEG Clients'], "name": `detail-substream-output="stream_mjpeg_clients"`, @@ -1577,14 +1574,15 @@ module.exports = function(s,config,lang){ "name": `detail-substream-output="stream_vcodec"`, "description": "Video codec for streaming.", "default": "copy", - "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", + "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", "fieldType": "select", "selector": "h_hls_v_channel_SUBSTREAM_FIELDS", "possible": [ { "name": lang.Auto, "value": "no", - "info": "Let FFMPEG choose." + "info": "Let FFMPEG choose.", + selected: true, }, { "name": "libx264", @@ -1659,12 +1657,13 @@ module.exports = function(s,config,lang){ "default": "", "example": "", "fieldType": "select", - "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", + "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", "possible": [ { "name": lang.Auto, "info": "Let FFMPEG choose.", - "value": "" + "value": "", + selected: true, }, { "name": lang["No Audio"], @@ -1730,7 +1729,7 @@ module.exports = function(s,config,lang){ "description": "Low number means higher quality. Higher number means less quality.", "default": "15", "example": "1", - "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", + // "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_mjpeg h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_jsmpeg h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", "possible": "1-23" }, @@ -1752,7 +1751,7 @@ module.exports = function(s,config,lang){ "name": "detail-substream-output=stream_fps", "field": lang['Frame Rate'], "description": "The speed in which frames are displayed to clients, in Frames Per Second. Be aware there is no default. This can lead to high bandwidth usage.", - "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", + // "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_mjpeg h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_jsmpeg h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", }, { @@ -1762,7 +1761,7 @@ module.exports = function(s,config,lang){ "fieldType": "number", "numberMin": "1", "example": "640", - "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", + // "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_mjpeg h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_jsmpeg h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", }, { @@ -1772,7 +1771,7 @@ module.exports = function(s,config,lang){ "fieldType": "number", "numberMin": "1", "example": "480", - "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", + // "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_mjpeg h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_jsmpeg h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", }, { @@ -1780,7 +1779,7 @@ module.exports = function(s,config,lang){ "field": lang["Rotate"], "description": "Change the viewing angle of the video stream.", "fieldType": "select", - "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", + // "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_mjpeg h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_jsmpeg h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", "possible": [ { @@ -1813,7 +1812,7 @@ module.exports = function(s,config,lang){ "name": "detail-substream-output=svf", "field": lang["Video Filter"], "description": "Place FFMPEG video filters in this box to affect the streaming portion. No spaces.", - "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", + // "form-group-class-pre-layer": "h_hls_v_channel_SUBSTREAM_FIELDS_input h_hls_v_channel_SUBSTREAM_FIELDS_libx264 h_hls_v_channel_SUBSTREAM_FIELDS_libx265 h_hls_v_channel_SUBSTREAM_FIELDS_h264_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_hevc_nvenc h_hls_v_channel_SUBSTREAM_FIELDS_no", "form-group-class": "h_st_channel_SUBSTREAM_FIELDS_input h_st_channel_SUBSTREAM_FIELDS_mjpeg h_st_channel_SUBSTREAM_FIELDS_hls h_st_channel_SUBSTREAM_FIELDS_rtmp h_st_channel_SUBSTREAM_FIELDS_jsmpeg h_st_channel_SUBSTREAM_FIELDS_flv h_st_channel_SUBSTREAM_FIELDS_mp4 h_st_channel_SUBSTREAM_FIELDS_h264", }, { @@ -2425,6 +2424,10 @@ module.exports = function(s,config,lang){ "name": `.5 ${lang.minutes}`, "value": "30" }, + { + "name": `1 ${lang.minute}`, + "value": "60" + }, { "name": `5 ${lang.minutes}`, "value": "300" @@ -5103,11 +5106,22 @@ module.exports = function(s,config,lang){ "blockquoteClass": "global_tip", "blockquote": lang.onvifdeviceManagerGlobalTip, "info": [ + { + "field": lang["Monitor"], + "fieldType": "select", + "class": "monitors_list", + "possible": [] + }, { "fieldType": "btn", "class": `btn-warning onvif-device-reboot`, "btnContent": `   ${lang['Reboot Camera']}`, }, + { + "fieldType": "div", + "class": "p-2", + "divContent": `
`,
+                     }
                  ]
              },
              "Network": {
@@ -5987,6 +6001,21 @@ module.exports = function(s,config,lang){
      "Schedules": {
          "section": "Schedules",
          "blocks": {
+             "Info": {
+                 "name": lang["Monitor States and Schedules"],
+                "color": "blue",
+                "section-pre-class": "col-md-12",
+                "blockquoteClass": "global_tip",
+                "blockquote": lang.MonitorStatesText,
+                "info": [
+                    {
+                       "fieldType": "btn",
+                       "attribute": `page-open="monitorStates"`,
+                       "class": `btn-primary`,
+                       "btnContent": `   ${lang["Monitor States"]}`,
+                    },
+                ]
+             },
              "Schedules": {
                 "name": lang["Schedules"],
                 "color": "orange",
@@ -6118,8 +6147,23 @@ module.exports = function(s,config,lang){
      "Monitor States": {
          "section": "Monitor States",
          "blocks": {
+             "Info": {
+                 "name": lang["Monitor States and Schedules"],
+                "color": "blue",
+                "section-pre-class": "col-md-12",
+                "blockquoteClass": "global_tip",
+                "blockquote": lang.MonitorStatesText,
+                "info": [
+                    {
+                       "fieldType": "btn",
+                       "attribute": `page-open="schedules"`,
+                       "class": `btn-primary`,
+                       "btnContent": `   ${lang["Schedules"]}`,
+                    },
+                ]
+             },
              "Monitor States": {
-                "name": lang["Monitor States"],
+                 noHeader: true,
                 "color": "green",
                 "section-pre-class": "col-md-6",
                 "info": [
@@ -6758,7 +6802,7 @@ module.exports = function(s,config,lang){
            "section": "Monitor Settings Additional Input Map",
            "blocks": {
               "Connection" : {
-                 "id": `monSectionMap$[NUMBER]`,
+                 "id": `monSectionMap$[TEMP_ID]`,
                  "name": `${lang['Input Map']} $[NUMBER]`,
                  "section-class": "input-map",
                  "color": "orange",
@@ -7350,8 +7394,11 @@ module.exports = function(s,config,lang){
                
+ + +
$MONITOR_NAME
@@ -7380,6 +7427,11 @@ module.exports = function(s,config,lang){ "class": "warning toggle-live-grid-monitor-logs", "icon": "exclamation-triangle" }, + "Show Logs": { + "label": lang['Toggle Substream'], + "class": "warning toggle-monitor-substream", + "icon": "eye" + }, "Control": { "label": lang['Control'], "class": "default toggle-live-grid-monitor-ptz-controls", @@ -7523,12 +7575,48 @@ module.exports = function(s,config,lang){ label: `${lang['Calendar']}`, pageOpen: 'calendarView', }, + { + icon: 'fast-forward', + label: `${lang['Time-lapse']}`, + pageOpen: 'timelapseViewer', + }, + { + divider: true, + }, { icon: 'wrench', label: `${lang['Monitor Settings']}`, pageOpen: 'monitorSettings', addUl: true, }, + { + icon: 'grav', + label: `${lang['Region Editor']}`, + pageOpen: 'regionEditor', + }, + { + icon: 'filter', + label: `${lang['Event Filters']}`, + pageOpen: 'eventFilters', + }, + { + icon: 'align-right', + label: `${lang['Monitor States']}`, + pageOpen: 'monitorStates', + }, + { + icon: 'clock', + label: `${lang['Schedules']}`, + pageOpen: 'schedules', + }, + { + icon: 'exclamation-triangle', + label: `${lang['Logs']}`, + pageOpen: 'logViewer', + }, + { + divider: true, + }, { icon: 'gears', label: `${lang['Account Settings']}`, @@ -7541,43 +7629,13 @@ module.exports = function(s,config,lang){ pageOpen: 'subAccountManager', addUl: true, }, - { - icon: 'compass', - label: `${lang['ShinobiHub']}`, - pageOpen: 'configFinder', - addUl: true, - }, - { - icon: 'grav', - label: `${lang['Region Editor']}`, - pageOpen: 'regionEditor', - addUl:true - }, { icon: 'key', label: `${lang['API Keys']}`, pageOpen: 'apiKeys', }, { - icon: 'align-right', - label: `${lang['Monitor States']}`, - pageOpen: 'monitorStates', - }, - { - icon: 'clock', - label: `${lang['Schedules']}`, - pageOpen: 'schedules', - }, - { - icon: 'fast-forward', - label: `${lang['Time-lapse']}`, - pageOpen: 'timelapseViewer', - }, - { - icon: 'filter', - label: `${lang['Event Filters']}`, - pageOpen: 'eventFilters', - addUl:true + divider: true, }, { icon: 'search', @@ -7585,15 +7643,29 @@ module.exports = function(s,config,lang){ pageOpen: 'onvifScanner', addUl:true }, + { + icon: 'opera', + label: `${lang['ONVIF Device Manager']}`, + pageOpen: 'onvifDeviceManager', + }, { icon: 'eyedropper', label: `${lang['FFprobe']}`, pageOpen: 'cameraProbe', }, { - icon: 'exclamation-triangle', - label: `${lang['Logs']}`, - pageOpen: 'logViewer', + icon: 'compass', + label: `${lang['ShinobiHub']}`, + pageOpen: 'configFinder', + addUl: true, + }, + { + divider: true, + }, + { + icon: 'info-circle', + label: `${lang['Help']}`, + pageOpen: 'helpWindow', }, // { // icon: 'exclamation-circle', @@ -7710,61 +7782,6 @@ module.exports = function(s,config,lang){ "Power Viewer": { "section": lang["Power Viewer"], "blocks": { - "Search Settings": { - id: "powerVideoTabs", - "color": "blue", - noHeader: true, - noDefaultSectionClasses: true, - attribute: `tab-chooser-parent`, - "section-pre-class": "col-md-4", - "info": [ - { - "color": "blue", - noHeader: true, - isSection: true, - isFormGroupGroup: true, - "info": [ - { - "field": lang['Monitors'], - "id": "powerVideoMonitorsList", - "form-group-attribute": 'tab-section=monitors', - "attribute": "multiple", - "fieldType": "select", - }, - { - "id": "powerVideoDateRange", - "field": lang['Date Range'], - }, - { - "id": "powerVideoVideoLimit", - "field": lang['Video Limit'] + ` (${lang['Per Monitor']})`, - "placeholder": "0", - }, - { - "id": "powerVideoEventLimit", - "field": lang['Event Limit'] + ` (${lang['Per Monitor']})`, - "placeholder": "500", - }, - { - id:'powerVideoSet', - field: lang['Video Set'], - default:'h264', - "fieldType": "select", - possible:[ - { - "name": lang.Local, - "value": "local" - }, - { - "name": lang.Cloud, - "value": "cloud" - }, - ] - }, - ] - }, - ] - }, "Video Playback": { id: "powerVideoVideoPlayback", noHeader: true, @@ -7856,13 +7873,60 @@ module.exports = function(s,config,lang){ }, ] }, + { + id: "powerVideoTabs", + attribute: `tab-chooser-parent`, + "color": "blue", + noHeader: true, + isSection: true, + isFormGroupGroup: true, + "info": [ + { + "field": lang['Monitors'], + "id": "powerVideoMonitorsList", + "form-group-attribute": 'tab-section=monitors', + "attribute": "multiple", + "fieldType": "select", + }, + { + "id": "powerVideoDateRange", + "field": lang['Date Range'], + }, + { + "id": "powerVideoVideoLimit", + "field": lang['Video Limit'] + ` (${lang['Per Monitor']})`, + "placeholder": "0", + }, + { + "id": "powerVideoEventLimit", + "field": lang['Event Limit'] + ` (${lang['Per Monitor']})`, + "placeholder": "500", + }, + { + id:'powerVideoSet', + field: lang['Video Set'], + default:'h264', + "fieldType": "select", + possible:[ + { + "name": lang.Local, + "value": "local" + }, + { + "name": lang.Cloud, + "value": "cloud" + }, + ] + }, + ] + }, ] }, "Time Strip": { id: "powerVideoTimelineStripsContainer", noHeader: true, "color": "bg-gradient-blue text-white", - "section-pre-class": "col-md-12 mt-3", + "section-pre-class": "col-md-4", "info": [ { "id": "powerVideoTimelineStrips", @@ -7870,7 +7934,7 @@ module.exports = function(s,config,lang){ "divContent": `
${lang['Select a Monitor']}
`, }, ] - } + }, } }, "Calendar": { diff --git a/languages/en_CA.json b/languages/en_CA.json index 16f67061..63078c57 100644 --- a/languages/en_CA.json +++ b/languages/en_CA.json @@ -23,8 +23,14 @@ "Use Raw Snapshot": "Use Raw Snapshot", "Login": "Login", "Substream": "Substream", + "Use Substream": "Use Substream", + "useSubStreamOnlyWhenWatching": "Only When Watching, Use Substream", + "substreamText": "This is an On-Demand method of viewing the Live Stream. You can make it so the viewing process is available only when someone is watching or to be used for switching between Low and High Resolution.", + "substreamConnectionText": "You can leave the Connection detail as-is if you want it to use the main Connection information set above.", + "substreamOutputText": "Here you can set the On-Demand Stream's configuration. Learn about latency of Stream types here.", "Toggle Substream": "Toggle Substream", "Output": "Output", + "SubstreamNotConfigured": "Substream not configured. Open your Monitor Settings and configure it.", "Substream Process": "Substream Process", "Welcome": "Welcome!", "API Key Action Failed": "API Key Action Failed", @@ -508,6 +514,7 @@ "ago": "ago", "a few seconds": "a few seconds", "a minute": "a minute", + "minute": "minute", "minutes": "minutes", "an hour": "an hour", "hours": "hours", @@ -577,6 +584,7 @@ "Creation Interval": "Creation Interval", "Plugin": "Plugin", "Plugin Manager": "Plugin Manager", + "MonitorStatesText": "You can learn about how to use this here on ShinobiHub.", "IdentityText1": "This is how the system will identify the data for this stream. You cannot change the Monitor ID once you have pressed save. If you want you can make the Monitor ID more human readable before you continue.", "IdentityText2": "You can duplicate a monitor by modifying the Monitor ID then pressing save. You cannot use the ID of a monitor that already exists or it will save over that monitor's database information.", "opencvCascadesText": "If you see nothing here then just download this package of cascades. Drop them into plugins/opencv/cascades then press refresh .", @@ -727,6 +735,7 @@ "NotifyErrorText": "Sending Notification caused an Error", "Check the Channel ID": "Check the Channel ID", "Check the Recipient ID": "Check the Recipient ID", + "AppNotEnabledText": "App Not Enabled, Enable it in your Account Settings.", "DiscordNotEnabledText": "Discord Bot Not Enabled, Enable it in your Account Settings.", "Account Settings": "Account Settings", "How to Record": "How to Record", @@ -1247,6 +1256,7 @@ "Close All Monitors": "Close All Monitors", "Daily Events": "Daily Events", "Send Notification": "Send Notification", + "Send to": "Send to", "setMaxStorageAmountText": "You should set your Max Storage Amount in your Account Settings located on the left. Find the option under the Profile section. Default is 10 GB.", "Save Events": "Save Events", "Original Choice": "Original Choice", diff --git a/languages/pt_BR.json b/languages/pt_BR.json index 34b64f42..14367af0 100644 --- a/languages/pt_BR.json +++ b/languages/pt_BR.json @@ -51,7 +51,7 @@ "Enable Nightvision": "Ativar Visão Noturna", "Disable Nightvision": "Desativar Visão Noturna", "Current": "Atual", - "Monitors": "Monitors", + "Monitors": "Monitores", "Video": "Video", "Videos": "Videos", "Events": "Eventos", @@ -122,12 +122,12 @@ "Execute Command": "Executar Comando", "for Global Access": "para Acesso Global", "Help": "Ajuda", - "Don't show this anymore": "Não mostre isso mais", + "Don't show this anymore": "Não me mostre isso mais", "Chat on Discord": "Conversar no Discord", "Documentation": "Documentação", "All Monitors": "Todos Monitores", - "Motion Meter": "Medidos de Movimento", - "FFmpegTip": "FFprobe is a simple multimedia streams analyzer. You can use it to output all kinds of information about an input including duration, frame rate, frame size, etc.", + "Motion Meter": "Medição de movimentos", + "FFmpegTip": "FFprobe é um simples analisador de streams. Você pode usá-lo para extrar todos os tipos de informação sobre uma entrada incluindo duração, taxa de frames por segundo, tamanho do frame, etc;", "Complete Stream URL": "URL de transmissão completa", "ONVIF Scanner": "ONVIF Scanner", "Scan Settings": "Configurações de digitalização", @@ -162,7 +162,7 @@ "Browser Console Log": "Navegador de logs", "All Monitors and Privileges": "Todos monitores e privilégios", "Permissions": "Permissões", - "Time-lapse Tool": "Ferramenta Time-laps", + "Time-lapse Tool": "Time-lapse", "total": "total", "MB": "MB", "Calendar": "Calendário", @@ -187,11 +187,11 @@ "Add New": "Adicionar novo", "Delete Selected Videos": "Excluir vídeos selecionados", "DeleteSelectedVideosMsg": "Deseja excluir esses vídeos? Você não poderá recuperá-los.", - "clientStreamFailedattemptingReconnect": "A verificação ctream do lado do cliente falhou, tentando reconectar.", + "clientStreamFailedattemptingReconnect": "A verificação do stream falhou, tentando se reconectar.", "Delete Filter": "Excluir filtro", "confirmDeleteFilter": "Deseja excluir este filtro? Você não poderá recuperá-lo.", "Fix Video": "Corrigir Vídeo", - "FixVideoMsg": "Você deseja corrigir esse vídeo? Você não poderá desfazer essa ação..", + "FixVideoMsg": "Você deseja corrigir o vídeo? Você não poderá desfazer essa ação..", "DeleteVideoMsg": "Deseja excluir este vídeo? Você não poderá recuperá-lo.", "dropBoxSuccess": "Sucesso! Arquivos salvos em seu Dropbox.", "API Key Deleted": "Chave da API excluída", @@ -246,13 +246,13 @@ "Connected": "Conectado", "Not Connected": "Não conectado", "Lisence Plate Detector": "Detector de placas", - "OpenCV Cascades": "OpenCV Cascatas", + "OpenCV Cascades": "Cascatas OpenCV ", "Refresh List of Cascades": "Atualizar Lista de Cascatas", "\"No Motion\" Detector": "\"Sem movimento\" Detector", "Control": "Controle", "Grouping": "Agrupando   Adicione grupos em Configurações", "Logging": "Logging", - "IdentityText1": "É assim que o sistema irá identificar os dados para este fluxo. Você não pode alterar o ID do Monitor uma vez que você pressionou salvar. Se você quiser, você pode fazer o ID do Monitor mais legível para humanos antes de continuar.", + "IdentityText1": "É assim que o sistema irá identificar os dados para este fluxo. Você não pode alterar o ID do Monitor uma vez que você o salvou. Se você quiser, você pode fazer o ID do Monitor mais legível para humanos antes de continuar.", "IdentityText2": "Você pode duplicar um monitor modificando o ID do Monitor e depois pressionando salvar. Você não pode usar o ID de um monitor que já existe ou ele economizará sobre as informações do banco de dados desse monitor.", "noSpecialCharacters": "Sem espaços ou caracteres especiais.", "NotesPlacholder": "Comentários que você quer deixar para as configurações desta câmera.", @@ -273,7 +273,7 @@ "Path": "Caminho", "Monitor Capture Rate": "Taxa de captura do monitor (FPS)", "Analyzation Duration": "Duração da análise", - "Probe Size": "Probe Size", + "Probe Size": "Tamanho da sonda", "Stream Type": "Tipo de transmissão", "# of Allow MJPEG Clients": "# para permitir clientes MJPEG 0 para infinito", "HLS Video Encoder": "Codificador de vídeo HLS", @@ -281,9 +281,9 @@ "HLS Segment Length": "Comprimento do segmento HLS em segundos", "HLS Preset": "Pré-definição HLS", "HLS List Size": "Tamanho da lista HLS", - "Check Signal Interval": "Verifique o intervalo do sinal em minutos", + "Check Signal Interval": "Verificar o intervalo do sinal em minutos", "Log Signal Event": "Evento de sinal de registro Apenas cliente", - "Quality": "Qualidade 1 para alta, 23 para Low", + "Quality": "Qualidade 1 para alta, 23 para baixa", "Rate": "Taxa (FPS)", "Width": "Largura", "Height": "Altura", @@ -444,13 +444,13 @@ "Process Unexpected Exit": "Saída inesperado do processo", "Process Crashed for Monitor": "Processo de Monitor quebrado", "FFmpegCantStart": "FFmpeg não pôde iniciar", - "FFmpegCantStartText": "O mecanismo de gravação para esta câmera não pôde começar. Pode haver algo errado com a configuração da sua câmera. Se houver algum registro diferente deste, por favor, coloque-os em Problemas no Github.", + "FFmpegCantStartText": "O FFMpeg não pode inicializar. Pode haver algo de errado com a configuração da sua câmera. Se houver alguma configuração diferente, por favor, reporte no Gitlab.", "JPEG Error": "Erro JPEG", "JPEGErrorText": "Houve um problema ao obter dados da sua câmera.", "Fatal Maximum Reached": "Máximo atingido, parando câmera.", - "FatalMaximumReachedText": "Erro JPEG fatal.", + "FatalMaximumReachedText": "Erro fatal de JPEG", "Incorrect Settings Chosen": "Configuração incorreta escolhida", - "Can't Connect": "Não pode conectar", + "Can't Connect": "Não foi possível conectar", "Video Finished": "Vídeo finalizado", "No Monitor Found, Ignoring Request": "Monitor não encontrado, ignorando requisição", "Event": "Evento", diff --git a/libs/commander/worker.js b/libs/commander/worker.js index 52350d41..e4af0b7c 100644 --- a/libs/commander/worker.js +++ b/libs/commander/worker.js @@ -251,7 +251,9 @@ const initialize = (config,lang) => { connectionToP2PServer.on('disconnect',onDisconnect) } startBridge() - setInterval(() => { - startBridge(true) - },1000 * 60 * 60 * 15) + setInterval(function(){ + if(!connectionToP2PServer || !connectionToP2PServer.connected){ + connectionToP2PServer.connect() + } + },1000 * 60 * 15) } diff --git a/libs/control/onvif.js b/libs/control/onvif.js index 77703fe4..c7e263c9 100644 --- a/libs/control/onvif.js +++ b/libs/control/onvif.js @@ -123,13 +123,24 @@ module.exports = function(s,config,lang,app,io){ } } async function getSnapshotFromOnvif(onvifOptions){ - return await createSnapshot({ - output: ['-s 400x400'], - url: addCredentialsToStreamLink({ + let theUrl; + if(onvifOptions.mid && onvifOptions.ke){ + const groupKey = onvifOptions.ke + const monitorId = onvifOptions.mid + const theDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection + theUrl = (await theDevice.services.media.getSnapshotUri({ + ProfileToken : theDevice.current_profile.token, + })).GetSnapshotUriResponse.MediaUri.Uri; + }else{ + theUrl = addCredentialsToStreamLink({ username: onvifOptions.username, password: onvifOptions.password, url: onvifOptions.uri - }), + }) + } + return await createSnapshot({ + output: ['-s 400x400'], + url: theUrl, }) } /** diff --git a/libs/database/utils.js b/libs/database/utils.js index f54428f0..ce7ae1a3 100644 --- a/libs/database/utils.js +++ b/libs/database/utils.js @@ -177,6 +177,7 @@ module.exports = function(s,config){ ] const monitorRestrictions = options.monitorRestrictions var frameLimit = options.limit + const noLimit = options.noLimit === '1' const endIsStartTo = options.endIsStartTo const chosenDate = options.date const startDate = options.startDate ? stringToSqlTime(options.startDate) : null @@ -217,6 +218,7 @@ module.exports = function(s,config){ whereQuery.push(['filename','=',options.filename]) frameLimit = "1"; } + if(noLimit)frameLimit = '0'; options.orderBy = options.orderBy ? options.orderBy : ['time','desc'] if(options.count)options.groupBy = options.groupBy ? options.groupBy : options.orderBy[0] knexQuery({ @@ -337,7 +339,7 @@ module.exports = function(s,config){ endDate: endTime, startOperator: startTimeOperator, endOperator: endTimeOperator, - limit: options.limit, + limit: options.noLimit === '1' ? '0' : options.limit, archived: archived, rowType: rowName, endIsStartTo: endIsStartTo diff --git a/libs/events/utils.js b/libs/events/utils.js index e26a83ce..0522c0ef 100644 --- a/libs/events/utils.js +++ b/libs/events/utils.js @@ -628,7 +628,7 @@ module.exports = (s,config,lang,app,io) => { save : false, webhook : false, command : false, - record : false, + record : true, forceRecord : false, indifference : false, countObjects : false @@ -646,8 +646,7 @@ module.exports = (s,config,lang,app,io) => { }) const eventDetails = d.details const passedEventFilters = checkEventFilters(d,monitorDetails,filter) - if(!passedEventFilters)return - const detailString = JSON.stringify(eventDetails) + if(!passedEventFilters)return; const eventTime = new Date() if( filter.addToMotionCounter && diff --git a/libs/ffmpeg.js b/libs/ffmpeg.js index 1b7905cc..7adc4b38 100644 --- a/libs/ffmpeg.js +++ b/libs/ffmpeg.js @@ -34,8 +34,7 @@ module.exports = async (s,config,lang,onFinish) => { mid: e.mid, } const ffmpegCommand = [`-progress pipe:5`]; - ([ - buildMainInput(e), + const allOutputs = [ buildMainStream(e), buildJpegApiOutput(e), buildMainRecording(e), @@ -43,21 +42,25 @@ module.exports = async (s,config,lang,onFinish) => { buildMainDetector(e), buildEventRecordingOutput(e), buildTimelapseOutput(e), - ]).forEach(function(commandStringPart){ - ffmpegCommand.push(commandStringPart) - }) - s.onFfmpegCameraStringCreationExtensions.forEach(function(extender){ - extender(e,ffmpegCommand) - }) - const stdioPipes = createPipeArray(e) - const ffmpegCommandString = ffmpegCommand.join(' ') - //hold ffmpeg command for log stream - s.group[e.ke].activeMonitors[e.mid].ffmpeg = sanitizedFfmpegCommand(e,ffmpegCommandString) - //clean the string of spatial impurities and split for spawn() - const ffmpegCommandParsed = splitForFFPMEG(ffmpegCommandString) - try{ - fs.unlinkSync(e.sdir + 'cmd.txt') - }catch(err){ + ]; + if(allOutputs.filter(output => !!output).length > 0){ + ([ + buildMainInput(e), + ]).concat(allOutputs).forEach(function(commandStringPart){ + ffmpegCommand.push(commandStringPart) + }) + s.onFfmpegCameraStringCreationExtensions.forEach(function(extender){ + extender(e,ffmpegCommand) + }) + const stdioPipes = createPipeArray(e) + const ffmpegCommandString = ffmpegCommand.join(' ') + //hold ffmpeg command for log stream + activeMonitor.ffmpeg = sanitizedFfmpegCommand(e,ffmpegCommandString) + //clean the string of spatial impurities and split for spawn() + const ffmpegCommandParsed = splitForFFPMEG(ffmpegCommandString) + try{ + fs.unlinkSync(e.sdir + 'cmd.txt') + }catch(err){ } fs.writeFileSync(e.sdir + 'cmd.txt',JSON.stringify({ @@ -69,20 +72,31 @@ module.exports = async (s,config,lang,onFinish) => { config: config, isAtleatOneDetectorPluginConnected: s.isAtleatOneDetectorPluginConnected } - },null,3),'utf8') - var cameraCommandParams = [ - config.monitorDaemonPath ? config.monitorDaemonPath : __dirname + '/cameraThread/singleCamera.js', - config.ffmpegDir, - e.sdir + 'cmd.txt' - ] - const cameraProcess = spawn('node',cameraCommandParams,{detached: true,stdio: stdioPipes}) - if(config.debugLog === true && config.debugLogMonitors === true){ - cameraProcess.stderr.on('data',(data) => { - console.log(`${e.ke} ${e.mid}`) - console.log(data.toString()) - }) + fs.writeFileSync(e.sdir + 'cmd.txt',JSON.stringify({ + cmd: ffmpegCommandParsed, + pipes: stdioPipes.length, + rawMonitorConfig: s.group[e.ke].rawMonitorConfigurations[e.id], + globalInfo: { + config: config, + isAtleatOneDetectorPluginConnected: s.isAtleatOneDetectorPluginConnected + } + },null,3),'utf8') + var cameraCommandParams = [ + config.monitorDaemonPath ? config.monitorDaemonPath : __dirname + '/cameraThread/singleCamera.js', + config.ffmpegDir, + e.sdir + 'cmd.txt' + ] + const cameraProcess = spawn('node',cameraCommandParams,{detached: true,stdio: stdioPipes}) + if(config.debugLog === true && config.debugLogMonitors === true){ + cameraProcess.stderr.on('data',(data) => { + console.log(`${e.ke} ${e.mid}`) + console.log(data.toString()) + }) + } + return cameraProcess + }else{ + return null } - return cameraProcess }catch(err){ s.systemLog(err) return null diff --git a/libs/ffmpeg/builders.js b/libs/ffmpeg/builders.js index 8096a649..27c08ab8 100644 --- a/libs/ffmpeg/builders.js +++ b/libs/ffmpeg/builders.js @@ -185,7 +185,7 @@ module.exports = (s,config,lang) => { const createStreamChannel = function(e,number,channel){ //`e` is the monitor object //`x` is an object used to contain temporary values. - const channelStreamDirectory = !isNaN(parseInt(number)) ? `${e.sdir}channel${number}/` : e.sdir + const channelStreamDirectory = !isNaN(parseInt(number)) ? `${e.sdir || s.getStreamsDirectory(e)}channel${number}/` : e.sdir if(channelStreamDirectory !== e.sdir && !fs.existsSync(channelStreamDirectory)){ try{ fs.mkdirSync(channelStreamDirectory) @@ -377,7 +377,7 @@ module.exports = (s,config,lang) => { //x = temporary values const streamFlags = [] const streamType = e.details.stream_type ? e.details.stream_type : 'hls' - if(streamType !== 'jpeg'){ + if(streamType !== 'jpeg' && streamType !== 'useSubstream'){ const isCudaEnabled = hasCudaEnabled(e) const streamFilters = [] const videoCodecisCopy = e.details.stream_vcodec === 'copy' diff --git a/libs/monitor.js b/libs/monitor.js index 12d5cd32..42124016 100644 --- a/libs/monitor.js +++ b/libs/monitor.js @@ -35,6 +35,10 @@ module.exports = function(s,config,lang){ cameraDestroy, monitorConfigurationMigrator, attachStreamChannelHandlers, + setActiveViewer, + getActiveViewerCount, + destroySubstreamProcess, + attachMainProcessHandlers, } = require('./monitor/utils.js')(s,config,lang) const { addEventDetailsToString, @@ -66,7 +70,7 @@ module.exports = function(s,config,lang){ if(!activeMonitor.contentWriter){activeMonitor.contentWriter={}}; if(!activeMonitor.childNodeStreamWriters){activeMonitor.childNodeStreamWriters={}}; if(!activeMonitor.eventBasedRecording){activeMonitor.eventBasedRecording={}}; - if(!activeMonitor.watch){activeMonitor.watch={}}; + if(!activeMonitor.watch){activeMonitor.watch = []}; if(!activeMonitor.fixingVideos){activeMonitor.fixingVideos={}}; // if(!activeMonitor.viewerConnection){activeMonitor.viewerConnection={}}; // if(!activeMonitor.viewerConnectionCount){activeMonitor.viewerConnectionCount=0}; @@ -151,7 +155,7 @@ module.exports = function(s,config,lang){ return x.ar; } s.getStreamsDirectory = (monitor) => { - return s.dir.streams + monitor.ke + '/' + monitor.mid + '/' + return s.dir.streams + monitor.ke + '/' + (monitor.mid || monitor.id) + '/' } s.getRawSnapshotFromMonitor = function(monitor,options){ return new Promise((resolve,reject) => { @@ -513,20 +517,7 @@ module.exports = function(s,config,lang){ s.checkDetails(e) if(e.ke && config.doSnapshot === true){ if(s.group[e.ke] && s.group[e.ke].rawMonitorConfigurations && s.group[e.ke].rawMonitorConfigurations[e.mid] && s.group[e.ke].rawMonitorConfigurations[e.mid].mode !== 'stop'){ - if(s.group[e.ke].activeMonitors[e.mid].onvifConnection){ - const screenShot = await s.getSnapshotFromOnvif({ - username: onvifUsername, - password: onvifPassword, - uri: cameraResponse.uri, - }); - s.tx({ - f: 'monitor_snapshot', - snapshot: screenShot.toString('base64'), - snapshot_format: 'b64', - mid: e.mid, - ke: e.ke - },'GRP_'+e.ke) - }else{ + async function getRaw(){ var pathDir = s.dir.streams+e.ke+'/'+e.mid+'/' const {screenShot, isStaticFile} = await s.getRawSnapshotFromMonitor(s.group[e.ke].rawMonitorConfigurations[e.mid],options) if(screenShot){ @@ -540,7 +531,27 @@ module.exports = function(s,config,lang){ }else{ s.debugLog('Damaged Snapshot Data') s.tx({f:'monitor_snapshot',snapshot:e.mon.name,snapshot_format:'plc',mid:e.mid,ke:e.ke},'GRP_'+e.ke) - } + } + } + if(s.group[e.ke].activeMonitors[e.mid].onvifConnection){ + try{ + const screenShot = await s.getSnapshotFromOnvif({ + ke: e.ke, + mid: e.mid, + }); + s.tx({ + f: 'monitor_snapshot', + snapshot: screenShot.toString('base64'), + snapshot_format: 'b64', + mid: e.mid, + ke: e.ke + },'GRP_'+e.ke) + }catch(err){ + s.debugLog(err) + await getRaw() + } + }else{ + await getRaw() } }else{ s.tx({f:'monitor_snapshot',snapshot:'Disabled',snapshot_format:'plc',mid:e.mid,ke:e.ke},'GRP_'+e.ke) @@ -765,55 +776,8 @@ module.exports = function(s,config,lang){ code: e.wantedStatusCode }); //on unexpected exit restart - s.group[e.ke].activeMonitors[e.id].spawn_exit = function(){ - if(s.group[e.ke].activeMonitors[e.id].isStarted === true){ - if(e.details.loglevel!=='quiet'){ - s.userLog(e,{type:lang['Process Unexpected Exit'],msg:{msg:lang.unexpectedExitText,cmd:s.group[e.ke].activeMonitors[e.id].ffmpeg}}); - } - fatalError(e,'Process Unexpected Exit'); - scanForOrphanedVideos(e,{ - forceCheck: true, - checkMax: 2 - }) - s.onMonitorUnexpectedExitExtensions.forEach(function(extender){ - extender(Object.assign(s.group[e.ke].rawMonitorConfigurations[e.id],{}),e) - }) - } - } - s.group[e.ke].activeMonitors[e.id].spawn.on('end',s.group[e.ke].activeMonitors[e.id].spawn_exit) - s.group[e.ke].activeMonitors[e.id].spawn.on('exit',s.group[e.ke].activeMonitors[e.id].spawn_exit) - s.group[e.ke].activeMonitors[e.id].spawn.on('error',function(er){ - s.userLog(e,{type:'Spawn Error',msg:er});fatalError(e,'Spawn Error') - }) - s.userLog(e,{type:lang['Process Started'],msg:{cmd:s.group[e.ke].activeMonitors[e.id].ffmpeg}}) - if(s.isWin === false){ - var strippedHost = s.stripAuthFromHost(e) - var sendProcessCpuUsage = function(){ - s.getMonitorCpuUsage(e,function(percent){ - s.group[e.ke].activeMonitors[e.id].currentCpuUsage = percent - s.tx({ - f: 'camera_cpu_usage', - ke: e.ke, - id: e.id, - percent: percent - },'MON_STREAM_'+e.ke+e.id) - }) - } - clearInterval(s.group[e.ke].activeMonitors[e.id].getMonitorCpuUsage) - s.group[e.ke].activeMonitors[e.id].getMonitorCpuUsage = setInterval(function(){ - if(e.details.skip_ping !== '1'){ - connectionTester.test(strippedHost,e.port,2000,function(err,response){ - if(response.success){ - sendProcessCpuUsage() - }else{ - launchMonitorProcesses(e) - } - }) - }else{ - sendProcessCpuUsage() - } - },1000 * 60) - } + if(s.group[e.ke].activeMonitors[e.id].spawn)attachMainProcessHandlers(e,fatalError) + return s.group[e.ke].activeMonitors[e.id].spawn } const createEventCounter = function(monitor){ if(monitor.details.detector_obj_count === '1'){ @@ -1235,27 +1199,29 @@ module.exports = function(s,config,lang){ if(pingResponse.success === true){ activeMonitor.isRecording = true try{ - createCameraFfmpegProcess(e) - createCameraStreamHandlers(e) + var mainProcess = createCameraFfmpegProcess(e) createEventCounter(e) - if(e.type === 'dashcam' || e.type === 'socket'){ - setTimeout(function(){ - activeMonitor.allowStdinWrite = true - s.txToDashcamUsers({ - f : 'enable_stream', - ke : e.ke, - mid : e.id - },e.ke) - },30000) - } - if( - e.functionMode === 'record' || - e.type === 'mjpeg' || - e.type === 'h264' || - e.type === 'local' - ){ - catchNewSegmentNames(e) - cameraFilterFfmpegLog(e) + if(mainProcess){ + createCameraStreamHandlers(e) + if(e.type === 'dashcam' || e.type === 'socket'){ + setTimeout(function(){ + activeMonitor.allowStdinWrite = true + s.txToDashcamUsers({ + f : 'enable_stream', + ke : e.ke, + mid : e.id + },e.ke) + },30000) + } + if( + e.functionMode === 'record' || + e.type === 'mjpeg' || + e.type === 'h264' || + e.type === 'local' + ){ + catchNewSegmentNames(e) + cameraFilterFfmpegLog(e) + } } clearTimeout(activeMonitor.onMonitorStartTimer) activeMonitor.onMonitorStartTimer = setTimeout(() => { @@ -1511,26 +1477,23 @@ module.exports = function(s,config,lang){ s.initiateMonitorObject({ke:e.ke,mid:e.id}) switch(e.functionMode){ case'watch_on'://live streamers - join - if(!cn.monitorsCurrentlyWatching){cn.monitorsCurrentlyWatching = {}} - if(!cn.monitorsCurrentlyWatching[e.id]){cn.monitorsCurrentlyWatching[e.id]={ke:e.ke}} - s.group[e.ke].activeMonitors[e.id].watch[cn.id]={}; - var numberOfViewers = Object.keys(s.group[e.ke].activeMonitors[e.id].watch).length - s.tx({ - viewers: numberOfViewers, - ke: e.ke, - id: e.id - },'MON_'+e.ke+e.id) + if(!cn.monitorsCurrentlyWatching){cn.monitorsCurrentlyWatching = {}} + if(!cn.monitorsCurrentlyWatching[e.id]){cn.monitorsCurrentlyWatching[e.id]={ke:e.ke}} + setActiveViewer(e.ke,e.id,cn.id,true) + s.group[e.ke].activeMonitors[e.id].allowDestroySubstream = false + clearTimeout(s.group[e.ke].activeMonitors[e.id].noViewerCountDisableSubstream) break; case'watch_off'://live streamers - leave if(cn.monitorsCurrentlyWatching){delete(cn.monitorsCurrentlyWatching[e.id])} - var numberOfViewers = 0 - delete(s.group[e.ke].activeMonitors[e.id].watch[cn.id]); - numberOfViewers = Object.keys(s.group[e.ke].activeMonitors[e.id].watch).length - s.tx({ - viewers: numberOfViewers, - ke: e.ke, - id: e.id - },'MON_'+e.ke+e.id) + setActiveViewer(e.ke,e.id,cn.id,false) + clearTimeout(s.group[e.ke].activeMonitors[e.id].noViewerCountDisableSubstream) + s.group[e.ke].activeMonitors[e.id].noViewerCountDisableSubstream = setTimeout(async () => { + let currentCount = getActiveViewerCount(e.ke,e.id) + if(currentCount === 0 && s.group[e.ke].activeMonitors[e.id].subStreamProcess){ + s.group[e.ke].activeMonitors[e.id].allowDestroySubstream = true + await destroySubstreamProcess(s.group[e.ke].activeMonitors[e.id]) + } + },10000) break; case'restart'://restart monitor s.sendMonitorStatus({ diff --git a/libs/monitor/utils.js b/libs/monitor/utils.js index c3b8d1d5..0fec5d3e 100644 --- a/libs/monitor/utils.js +++ b/libs/monitor/utils.js @@ -3,7 +3,11 @@ const treekill = require('tree-kill'); const spawn = require('child_process').spawn; const events = require('events'); const Mp4Frag = require('mp4frag'); +const streamViewerCountTimeouts = {} module.exports = (s,config,lang) => { + const { + scanForOrphanedVideos + } = require('../video/utils.js')(s,config,lang) const { createPipeArray, splitForFFPMEG, @@ -17,6 +21,10 @@ module.exports = (s,config,lang) => { const processKill = (proc) => { const response = {ok: true} return new Promise((resolve,reject) => { + if(!proc){ + resolve(response) + return + } function sendError(err){ response.ok = false response.err = err @@ -94,13 +102,17 @@ module.exports = (s,config,lang) => { if(activeMonitor.onChildNodeExit){ activeMonitor.onChildNodeExit() } - activeMonitor.spawn.stdio.forEach(function(stdio){ - try{ - stdio.unpipe() - }catch(err){ - console.log(err) - } - }) + try{ + activeMonitor.spawn.stdio.forEach(function(stdio){ + try{ + stdio.unpipe() + }catch(err){ + console.log(err) + } + }) + }catch(err){ + // s.debugLog(err) + } if(activeMonitor.mp4frag){ var mp4FragChannels = Object.keys(activeMonitor.mp4frag) mp4FragChannels.forEach(function(channel){ @@ -116,6 +128,7 @@ module.exports = (s,config,lang) => { }else{ processKill(proc).then((response) => { s.debugLog(`cameraDestroy`,response) + activeMonitor.allowDestroySubstream = true destroySubstreamProcess(activeMonitor).then((response) => { if(response.hadSubStream)s.debugLog(`cameraDestroy`,response.closeResponse) }) @@ -209,13 +222,19 @@ module.exports = (s,config,lang) => { const spawnSubstreamProcess = function(e){ // e = monitorConfig try{ - const monitorConfig = s.group[e.ke].rawMonitorConfigurations[e.mid] + const groupKey = e.ke + const monitorId = e.mid + const monitorConfig = Object.assign({},s.group[groupKey].rawMonitorConfigurations[monitorId]) const monitorDetails = monitorConfig.details const activeMonitor = s.group[e.ke].activeMonitors[e.mid] const channelNumber = 1 + (monitorDetails.stream_channels || []).length const ffmpegCommand = [`-progress pipe:5`]; const logLevel = monitorDetails.loglevel ? e.details.loglevel : 'warning' const stdioPipes = createPipeArray({}, 2) + const substreamConfig = monitorConfig.details.substream + substreamConfig.input.type = !substreamConfig.input.fulladdress ? monitorConfig.type : substreamConfig.input.type || monitorConfig.details.rtsp_transport + substreamConfig.input.fulladdress = substreamConfig.input.fulladdress || s.buildMonitorUrl(monitorConfig) + substreamConfig.input.rtsp_transport = substreamConfig.input.rtsp_transport || monitorConfig.details.rtsp_transport const { inputAndConnectionFields, outputFields, @@ -259,8 +278,7 @@ module.exports = (s,config,lang) => { s.userLog({ ke: e.ke, mid: e.mid, - }, - { + },{ type: lang["Substream Process"], msg: data.toString() }) @@ -302,21 +320,25 @@ module.exports = (s,config,lang) => { hadSubStream: false, alreadyClosing: false } - if(activeMonitor.subStreamProcessClosing){ - response.alreadyClosing = true - }else if(activeMonitor.subStreamProcess){ - activeMonitor.subStreamProcessClosing = true - activeMonitor.subStreamChannel = null; - const closeResponse = await processKill(activeMonitor.subStreamProcess) - response.hadSubStream = true - response.closeResponse = closeResponse - delete(activeMonitor.subStreamProcess) - s.tx({ - f: 'substream_end', - mid: activeMonitor.mid, - ke: activeMonitor.ke - },'GRP_'+activeMonitor.ke); - activeMonitor.subStreamProcessClosing = false + try{ + if(activeMonitor.subStreamProcessClosing){ + response.alreadyClosing = true + }else if(activeMonitor.subStreamProcess){ + activeMonitor.subStreamProcessClosing = true + activeMonitor.subStreamChannel = null; + const closeResponse = await processKill(activeMonitor.subStreamProcess) + response.hadSubStream = true + response.closeResponse = closeResponse + delete(activeMonitor.subStreamProcess) + s.tx({ + f: 'substream_end', + mid: activeMonitor.mid, + ke: activeMonitor.ke + },'GRP_'+activeMonitor.ke); + activeMonitor.subStreamProcessClosing = false + } + }catch(err){ + s.debugLog('destroySubstreamProcess',err) } return response } @@ -360,6 +382,97 @@ module.exports = (s,config,lang) => { ffmpegProcess.stdio[pipeNumber].on('data',frameToStreamAdded) } } + function setActiveViewer(groupKey,monitorId,connectionId,isBeingAdded){ + const viewerList = s.group[groupKey].activeMonitors[monitorId].watch; + if(isBeingAdded){ + if(viewerList.indexOf(connectionId) > -1)viewerList.push(connectionId); + }else{ + viewerList.splice(viewerList.indexOf(connectionId), 1) + } + const numberOfViewers = viewerList.length + s.tx({ + f: 'viewer_count', + viewers: numberOfViewers, + ke: groupKey, + id: monitorId + },'MON_' + groupKey + monitorId) + return numberOfViewers; + } + function getActiveViewerCount(groupKey,monitorId){ + const viewerList = s.group[groupKey].activeMonitors[monitorId].watch; + const numberOfViewers = viewerList.length + return numberOfViewers; + } + function setTimedActiveViewerForHttp(req){ + const groupKey = req.params.ke + const connectionId = req.params.auth + const loggedInUser = s.group[groupKey].users[connectionId] + if(!loggedInUser){ + const monitorId = req.params.id + const viewerList = s.group[groupKey].activeMonitors[monitorId].watch + const theViewer = viewerList[connectionId] + if(!theViewer){ + setActiveViewer(groupKey,monitorId,connectionId,true) + } + clearTimeout(streamViewerCountTimeouts[req.originalUrl]) + streamViewerCountTimeouts[req.originalUrl] = setTimeout(() => { + setActiveViewer(groupKey,monitorId,connectionId,false) + },5000) + }else{ + s.debugLog(`User is Logged in, Don't add to viewer count`); + } + } + function attachMainProcessHandlers(e,fatalError){ + s.group[e.ke].activeMonitors[e.id].spawn_exit = function(){ + if(s.group[e.ke].activeMonitors[e.id].isStarted === true){ + if(e.details.loglevel!=='quiet'){ + s.userLog(e,{type:lang['Process Unexpected Exit'],msg:{msg:lang.unexpectedExitText,cmd:s.group[e.ke].activeMonitors[e.id].ffmpeg}}); + } + fatalError(e,'Process Unexpected Exit'); + scanForOrphanedVideos(e,{ + forceCheck: true, + checkMax: 2 + }) + s.onMonitorUnexpectedExitExtensions.forEach(function(extender){ + extender(Object.assign(s.group[e.ke].rawMonitorConfigurations[e.id],{}),e) + }) + } + } + s.group[e.ke].activeMonitors[e.id].spawn.on('end',s.group[e.ke].activeMonitors[e.id].spawn_exit) + s.group[e.ke].activeMonitors[e.id].spawn.on('exit',s.group[e.ke].activeMonitors[e.id].spawn_exit) + s.group[e.ke].activeMonitors[e.id].spawn.on('error',function(er){ + s.userLog(e,{type:'Spawn Error',msg:er});fatalError(e,'Spawn Error') + }) + s.userLog(e,{type:lang['Process Started'],msg:{cmd:s.group[e.ke].activeMonitors[e.id].ffmpeg}}) + // if(s.isWin === false){ + // var strippedHost = s.stripAuthFromHost(e) + // var sendProcessCpuUsage = function(){ + // s.getMonitorCpuUsage(e,function(percent){ + // s.group[e.ke].activeMonitors[e.id].currentCpuUsage = percent + // s.tx({ + // f: 'camera_cpu_usage', + // ke: e.ke, + // id: e.id, + // percent: percent + // },'MON_STREAM_'+e.ke+e.id) + // }) + // } + // clearInterval(s.group[e.ke].activeMonitors[e.id].getMonitorCpuUsage) + // s.group[e.ke].activeMonitors[e.id].getMonitorCpuUsage = setInterval(function(){ + // if(e.details.skip_ping !== '1'){ + // connectionTester.test(strippedHost,e.port,2000,function(err,response){ + // if(response.success){ + // sendProcessCpuUsage() + // }else{ + // launchMonitorProcesses(e) + // } + // }) + // }else{ + // sendProcessCpuUsage() + // } + // },1000 * 60) + // } + } return { cameraDestroy: cameraDestroy, createSnapshot: createSnapshot, @@ -369,5 +482,9 @@ module.exports = (s,config,lang) => { spawnSubstreamProcess: spawnSubstreamProcess, destroySubstreamProcess: destroySubstreamProcess, attachStreamChannelHandlers: attachStreamChannelHandlers, + setActiveViewer: setActiveViewer, + getActiveViewerCount: getActiveViewerCount, + setTimedActiveViewerForHttp: setTimedActiveViewerForHttp, + attachMainProcessHandlers: attachMainProcessHandlers, } } diff --git a/libs/notifications/emailByUser.js b/libs/notifications/emailByUser.js new file mode 100644 index 00000000..2eeff646 --- /dev/null +++ b/libs/notifications/emailByUser.js @@ -0,0 +1,412 @@ +var fs = require('fs'); +const { + template, + checkEmail, +} = require("./emailUtils.js") +module.exports = function (s, config, lang, getSnapshot) { + const { getEventBasedRecordingUponCompletion } = require('../events/utils.js')(s, config, lang); + const nodeMailer = require('nodemailer'); + try { + const sendMessage = async function (sendBody, files, groupKey) { + const transporter = s.group[groupKey].emailClient; + if (!transporter) { + s.userLog( + { ke: groupKey, mid: '$USER' }, + { + type: lang.NotifyErrorText, + msg: { + msg: lang.AppNotEnabledText, + app: lang.Email + }, + } + ); + return; + } + try { + const appOptions = s.group[groupKey].emailClientOptions.transport; + const sendTo = appOptions.sendTo; + const sendData = { + from: `"shinobi.video" <${transportOptions.auth.user}>`, + to: sendTo, + subject: sendBody.subject, + html: sendBody.html, + }; + if (files.length > 0) { + // sadly pushover allows only ONE single attachment + msg.file = { + name: files[0].name, + data: files[0].attachment, + }; + } + transporter.sendMail(sendData, function (err, result) { + if (err) { + throw err; + } + s.userLog(result); + s.debugLog(result); + }); + } catch (err) { + s.userLog( + { ke: groupKey, mid: '$USER' }, + { type: lang.NotifyErrorText, msg: err } + ); + } + }; + + const loadAppForUser = function (user) { + const userDetails = s.parseJSON(user.details); + const optionsHost = userDetails.emailClient_host + const optionsUser = userDetails.emailClient_user + const optionsSendTo = userDetails.emailClient_sendTo || '' + if ( + !s.group[user.ke].emailClient && + userDetails.emailClient === '1' && + optionsHost && + optionsUser && + optionsSendTo + ){ + const optionsPass = userDetails.emailClient_pass || '' + const optionsSecure = userDetails.emailClient_secure === '1' ? true : false + const optionsPort = isNaN(userDetails.emailClient_port) ? (optionsSecure ? 465 : 587) : parseInt(userDetails.emailClient_port) + const clientOptions = { + host: optionsHost, + port: optionsPort, + secure: optionsSecure, + auth: { + user: optionsUser, + pass: optionsPass + } + } + s.group[user.ke].emailClientOptions = { + transport: clientOptions, + sendTo: optionsSendTo, + } + s.group[user.ke].emailClient = nodeMailer.createTransport(clientOptions) + } + }; + + const unloadAppForUser = function (user) { + if ( + s.group[user.ke].emailClient && + s.group[user.ke].emailClient.close + ) { + s.group[user.ke].emailClient.close(); + } + delete s.group[user.ke].emailClient; + delete s.group[user.ke].emailClientOptions; + }; + + const onTwoFactorAuthCodeNotificationForApp = function (r) { + // r = user + if (r.details.factor_emailClient === '1') { + sendMessage({ + subject: r.lang['2-Factor Authentication'], + html: template.createFramework({ + title: r.lang['2-Factor Authentication'], + subtitle: r.lang['Enter this code to proceed'], + body: ''+s.factorAuth[r.ke][r.uid].key+'

'+r.lang.FactorAuthText1, + }), + },[],r.ke); + } + }; + + const onEventTriggerForApp = async (d, filter) => { + const monitorConfig = s.group[d.ke].rawMonitorConfigurations[d.id]; + // d = event object + if ( + s.group[d.ke].emailClient && + (filter.emailClient || monitorConfig.details.notify_emailClient === '1') && + !s.group[d.ke].activeMonitors[d.id].detector_emailClient + ) { + var detector_emailClient_timeout; + if ( + !monitorConfig.details.detector_emailClient_timeout || + monitorConfig.details.detector_emailClient_timeout === '' + ) { + detector_emailClient_timeout = 1000 * 60 * 10; + } else { + detector_emailClient_timeout = + parseFloat( + monitorConfig.details.detector_emailClient_timeout + ) * + 1000 * + 60; + } + s.group[d.ke].activeMonitors[d.id].detector_emailClient = setTimeout(function () { + s.group[d.ke].activeMonitors[d.id].detector_emailClient = null; + }, detector_emailClient_timeout); + + // lock passed + const sendMail = function(files){ + const infoRows = [] + Object.keys(d.details).forEach(function(key){ + var value = d.details[key] + var text = value + if(value instanceof Object){ + text = JSON.stringify(value,null,3) + } + infoRows.push(template.createRow({ + title: key, + text: text + })) + }) + sendMessage({ + subject: lang.Event+' - '+d.screenshotName, + html: template.createFramework({ + title: lang.EventText1 + ' ' + d.currentTimestamp, + subtitle: lang.Event, + body: infoRows.join(''), + }), + },files || [],r.ke) + } + if(monitorConfig.details.detector_mail_send_video === '1'){ + let videoPath = null + let videoName = null + const eventBasedRecording = await getEventBasedRecordingUponCompletion({ + ke: d.ke, + mid: d.mid + }) + if(eventBasedRecording.filePath){ + videoPath = eventBasedRecording.filePath + videoName = eventBasedRecording.filename + }else{ + const siftedVideoFileFromRam = await s.mergeDetectorBufferChunks(d) + videoPath = siftedVideoFileFromRam.filePath + videoName = siftedVideoFileFromRam.filename + } + if(videoPath){ + fs.readFile(mergedFilepath,function(err,buffer){ + if(buffer){ + sendMail([ + { + filename: videoName, + content: buffer + } + ]) + } + }) + } + } + await getSnapshot(d,monitorConfig) + sendMail([ + { + filename: d.screenshotName + '.jpg', + content: d.screenshotBuffer + } + ]) + } + }; + + const onEventTriggerBeforeFilterForApp = function (d, filter) { + filter.emailClient = false; + }; + + const onDetectorNoTriggerTimeoutForApp = function (e) { + //e = monitor object + var currentTime = new Date(); + if (e.details.detector_notrigger_emailClient === '1') { + var html = + '*' + + lang.NoMotionEmailText2 + + ' ' + + (e.details.detector_notrigger_timeout || 10) + + ' ' + + lang.minutes + + '.*\n'; + html += + '**' + lang['Monitor Name'] + '** : ' + e.name + '\n'; + html += '**' + lang['Monitor ID'] + '** : ' + e.id + '\n'; + html += currentTime; + sendMessage({ + subject: lang['"No Motion" Detector'], + html: template.createFramework({ + title: lang['"No Motion" Detector'], + subtitle: 'Shinobi Event', + body: html, + }), + },[],e.ke); + } + }; + + const onMonitorUnexpectedExitForApp = (monitorConfig) => { + if ( + monitorConfig.details.notify_emailClient === '1' && + monitorConfig.details.notify_onUnexpectedExit === '1' + ){ + const ffmpegCommand = s.group[monitorConfig.ke].activeMonitors[monitorConfig.mid].ffmpeg + const subject = lang['Process Unexpected Exit'] + ' : ' + monitorConfig.name + const currentTime = new Date(); + sendMessage({ + subject: subject, + html: template.createFramework({ + title: subject, + subtitle: lang['Process Crashed for Monitor'], + body: ffmpegCommand, + footerText: currentTime + }), + },[],monitorConfig.ke); + } + }; + + s.loadGroupAppExtender(loadAppForUser); + s.unloadGroupAppExtender(unloadAppForUser); + s.onTwoFactorAuthCodeNotification(onTwoFactorAuthCodeNotificationForApp); + s.onEventTrigger(onEventTriggerForApp); + s.onEventTriggerBeforeFilter(onEventTriggerBeforeFilterForApp); + s.onDetectorNoTriggerTimeout(onDetectorNoTriggerTimeoutForApp); + s.onMonitorUnexpectedExit(onMonitorUnexpectedExitForApp); + s.definitions['Monitor Settings'].blocks[ + 'Notifications' + ].info[0].info.push({ + name: 'detail=notify_emailClient', + field: lang.Email, + description: '', + default: '0', + example: '', + selector: 'h_det_emailClient', + fieldType: 'select', + possible: [ + { + name: lang.No, + value: '0', + }, + { + name: lang.Yes, + value: '1', + }, + ], + }); + s.definitions['Monitor Settings'].blocks['Notifications'].info.push( + { + evaluation: "$user.details.use_emailClient !== '0'", + isFormGroupGroup: true, + name: lang.Email, + color: 'blue', + 'section-class': 'h_det_emailClient_input h_det_emailClient_1', + info: [ + { + name: 'detail=detector_emailClient_timeout', + field: `${lang['Allow Next Alert']} (${lang['on Event']})`, + default: '10', + }, + ], + } + ); + s.definitions['Account Settings'].blocks[ + '2-Factor Authentication' + ].info.push({ + name: 'detail=factor_emailClient', + field: lang.Email, + default: '1', + example: '', + fieldType: 'select', + possible: [ + { + name: lang.No, + value: '0', + }, + { + name: lang.Yes, + value: '1', + }, + ], + }); + s.definitions['Account Settings'].blocks['Email'] = { + evaluation: "$user.details.use_emailClient !== '0'", + field: lang.Email, + color: 'blue', + info: [ + { + name: 'detail=emailClient', + selector: 'u_emailClient', + field: lang.Enabled, + default: '0', + example: '', + fieldType: 'select', + possible: [ + { + name: lang.No, + value: '0', + }, + { + name: lang.Yes, + value: '1', + }, + ], + }, + { + hidden: true, + field: lang.Host, + name: 'detail=emailClient_host', + example: 'smtp.gmail.com', + 'form-group-class': 'u_emailClient_input u_emailClient_1', + }, + { + hidden: true, + field: lang.Port, + name: 'detail=emailClient_port', + example: '587', + 'form-group-class': 'u_emailClient_input u_emailClient_1', + }, + { + name: 'detail=emailClient_secure', + field: lang.Secure, + default: '0', + example: '', + fieldType: 'select', + possible: [ + { + name: lang.No, + value: '0', + }, + { + name: lang.Yes, + value: '1', + }, + ], + }, + { + hidden: true, + field: lang.Email, + name: 'detail=emailClient_user', + example: 'test@gmail.com', + 'form-group-class': 'u_emailClient_input u_emailClient_1', + }, + { + hidden: true, + field: lang.Password, + name: 'detail=emailClient_pass', + 'form-group-class': 'u_emailClient_input u_emailClient_1', + }, + { + hidden: true, + field: lang['Send to'], + name: 'detail=emailClient_sendTo', + 'form-group-class': 'u_emailClient_input u_emailClient_1', + }, + ], + }; + s.definitions["Event Filters"].blocks["Action for Selected"].info.push({ + "name": "actions=emailClient", + "field": lang['Email'], + "fieldType": "select", + "form-group-class": "actions-row", + "default": "", + "example": "1", + "possible": [ + { + "name": lang['Original Choice'], + "value": "", + "selected": true + }, + { + "name": lang.Yes, + "value": "1", + } + ] + }) + } catch (err) { + console.log(err); + console.log('Could not engage Email notifications.'); + } +}; diff --git a/libs/onvifDeviceManager.js b/libs/onvifDeviceManager.js index 921971e7..072c7da1 100644 --- a/libs/onvifDeviceManager.js +++ b/libs/onvifDeviceManager.js @@ -17,6 +17,10 @@ const { } = require('./onvifDeviceManager/utils.js') module.exports = function(s,config,lang,app,io){ + async function getOnvifDevice(groupKey,monitorId){ + const onvifDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection || (await s.createOnvifDevice({id: monitorId, ke: groupKey})).device + return onvifDevice + } /** * API : Get ONVIF Data from Camera */ @@ -26,7 +30,7 @@ module.exports = function(s,config,lang,app,io){ try{ const groupKey = req.params.ke const monitorId = req.params.id - const onvifDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection + const onvifDevice = await getOnvifDevice(groupKey,monitorId) const cameraInfo = await getUIFieldValues(onvifDevice) endData.onvifData = cameraInfo }catch(err){ @@ -47,7 +51,7 @@ module.exports = function(s,config,lang,app,io){ try{ const groupKey = req.params.ke const monitorId = req.params.id - const onvifDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection + const onvifDevice = await getOnvifDevice(groupKey,monitorId) const form = s.getPostData(req) const videoToken = form.VideoConfiguration && form.VideoConfiguration.videoToken ? form.VideoConfiguration.videoToken : null if(form.DateandTime){ @@ -100,7 +104,7 @@ module.exports = function(s,config,lang,app,io){ try{ const groupKey = req.params.ke const monitorId = req.params.id - const onvifDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection + const onvifDevice = await getOnvifDevice(groupKey,monitorId) const cameraInfo = await rebootCamera(onvifDevice) endData.onvifData = cameraInfo }catch(err){ diff --git a/libs/onvifDeviceManager/utils.js b/libs/onvifDeviceManager/utils.js index 2ba4396a..0d632979 100644 --- a/libs/onvifDeviceManager/utils.js +++ b/libs/onvifDeviceManager/utils.js @@ -149,6 +149,7 @@ const getDeviceInformation = async (onvifDevice,options) => { response.ok = false response.error = err.stack.toString().toString() s.debugLog(err) + s.debugLog(onvifDevice) } return response } diff --git a/libs/scanners/utils.js b/libs/scanners/utils.js index 4cd4f8f2..0a10107f 100644 --- a/libs/scanners/utils.js +++ b/libs/scanners/utils.js @@ -119,6 +119,9 @@ module.exports = (s,config,lang) => { ProfileToken : device.current_profile.token, Protocol : 'RTSP' }) + const snapUri = (await device.services.media.getSnapshotUri({ + ProfileToken : device.current_profile.token, + })).GetSnapshotUriResponse.MediaUri.Uri var cameraResponse = { ip: camera.ip, port: camera.port, @@ -147,7 +150,7 @@ module.exports = (s,config,lang) => { imageSnap = (await s.getSnapshotFromOnvif({ username: onvifUsername, password: onvifPassword, - uri: cameraResponse.uri, + uri: snapUri, })).toString('base64'); }catch(err){ s.debugLog(err) @@ -185,7 +188,7 @@ module.exports = (s,config,lang) => { error: errorMessage }) } - s.debugLog(err) + if(config.debugLogVerbose)s.debugLog(err); } }) return responseList diff --git a/libs/socketio.js b/libs/socketio.js index e02c3918..f6a3b1bd 100644 --- a/libs/socketio.js +++ b/libs/socketio.js @@ -955,7 +955,22 @@ module.exports = function(s,config,lang,io){ s.deleteFileBinEntry(d.file) break; case's.setDiskUsedForGroup': - s.setDiskUsedForGroup(d.ke,d.size,d.target || undefined) + function doOnMain(){ + s.setDiskUsedForGroup(d.ke,d.size,d.target || undefined) + } + if(d.videoRow){ + let storageIndex = s.getVideoStorageIndex(d.videoRow); + if(storageIndex){ + s.setDiskUsedForGroupAddStorage(d.ke,{ + size: d.size, + storageIndex: storageIndex + }) + }else{ + doOnMain() + } + }else{ + doOnMain() + } break; case'start':case'end': d.mid='_cron';s.userLog(d,{type:'cron',msg:d.msg}) diff --git a/libs/timelapse.js b/libs/timelapse.js index de2f9562..39a6be5d 100644 --- a/libs/timelapse.js +++ b/libs/timelapse.js @@ -176,6 +176,7 @@ module.exports = function(s,config,lang,app,io){ endDate: req.query.end, startOperator: req.query.startOperator, endOperator: req.query.endOperator, + noLimit: req.query.noLimit, limit: req.query.limit, archived: req.query.archived, rowType: 'frames', @@ -241,9 +242,9 @@ module.exports = function(s,config,lang,app,io){ const frames = [] var n = 0 framesPosted.forEach((frame) => { - var firstParam = ['ke','=',req.params.ke] - if(n !== 0)firstParam = (['or']).concat(firstParam) - frames.push(firstParam,['mid','=',req.params.id],['filename','=',frame.filename]) + var firstParam = [['ke','=',req.params.ke],['mid','=',req.params.id],['filename','=',frame.filename]] + if(n !== 0)firstParam[0] = (['or']).concat(firstParam[0]) + frames.push(...firstParam) ++n }) s.knexQuery({ @@ -252,6 +253,7 @@ module.exports = function(s,config,lang,app,io){ table: "Timelapse Frames", where: frames },(err,r) => { + s.debugLog("Timelapse Frames Building Video",r.length) if(r.length === 0){ s.closeJsonResponse(res,{ ok: false @@ -330,6 +332,7 @@ module.exports = function(s,config,lang,app,io){ groupKey: req.params.ke, archived: req.query.archived, filename: req.params.filename, + limit: 1, rowType: 'frames', endIsStartTo: true },(response) => { diff --git a/libs/videos.js b/libs/videos.js index 2a74cba4..8b2d7ad1 100644 --- a/libs/videos.js +++ b/libs/videos.js @@ -220,7 +220,7 @@ module.exports = function(s,config,lang){ filename: filename, mid: e.id, ke: e.ke, - time: s.nameToTime(filename), + time: new Date(s.nameToTime(filename)), end: s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss') },'GRP_'+e.ke); var storageIndex = s.getVideoStorageIndex(e) @@ -471,13 +471,13 @@ module.exports = function(s,config,lang){ file.pipe(res) return file } - s.createVideoFromTimelapse = function(timelapseFrames,framesPerSecond,callback){ + s.createVideoFromTimelapse = async function(timelapseFrames,framesPerSecond,callback){ framesPerSecond = parseInt(framesPerSecond) if(!framesPerSecond || isNaN(framesPerSecond))framesPerSecond = 2 var frames = timelapseFrames.reverse() var ke = frames[0].ke var mid = frames[0].mid - var finalFileName = frames[0].filename.split('.')[0] + '_' + frames[frames.length - 1].filename.split('.')[0] + `-${framesPerSecond}fps` + var finalFileName = `${s.md5(JSON.stringify(frames))}-${framesPerSecond}fps` var concatFiles = [] var createLocation frames.forEach(function(frame,frameNumber){ @@ -515,7 +515,7 @@ module.exports = function(s,config,lang){ } },4000) }) - videoBuildProcess.on('exit',function(data){ + videoBuildProcess.on('close',function(data){ var timeNow = new Date() var fileStats = fs.statSync(finalMp4OutputLocation) var details = {} @@ -547,12 +547,11 @@ module.exports = function(s,config,lang){ if(!err)videoBuildProcess.stdin.write(buffer) if(currentFile === concatFiles.length - 1){ //is last - }else{ - setTimeout(function(){ + setTimeout(async function(){ ++currentFile readFile() - },1/framesPerSecond) + },10/framesPerSecond) } }) } @@ -565,13 +564,22 @@ module.exports = function(s,config,lang){ msg: lang['Started Building'] }) }else{ - callback({ - ok: false, - fileExists: true, - filename: finalFileName + '.mp4', - fileLocation: finalMp4OutputLocation, - msg: lang['Already exists'] - }) + if(s.group[ke].activeMonitors[mid].buildingTimelapseVideo){ + callback({ + ok: false, + fileExists: false, + fileLocation: finalMp4OutputLocation, + msg: lang.Building + }) + }else{ + callback({ + ok: false, + fileExists: true, + filename: finalFileName + '.mp4', + fileLocation: finalMp4OutputLocation, + msg: lang['Already exists'] + }) + } } }else{ callback({ @@ -591,9 +599,11 @@ module.exports = function(s,config,lang){ } s.getVideoStorageIndex = function(video){ try{ - var details = s.parseJSON(video.details) || {} - var storageId = details.storageId - if(s.group[video.ke] && s.group[video.ke].activeMonitors[video.id] && s.group[video.ke].activeMonitors[video.id].addStorageId)storageId = s.group[video.ke].activeMonitors[video.id].addStorageId + const monitorId = video.id || video.mid + const details = s.parseJSON(video.details) || {} + let storageId = details.storageId + const activeMonitor = s.group[video.ke] && s.group[video.ke].activeMonitors[monitorId] ? s.group[video.ke].activeMonitors[monitorId] : null; + if(activeMonitor && activeMonitor.addStorageId)storageId = activeMonitor.addStorageId; if(storageId){ return s.group[video.ke].addStorageUse[storageId] } diff --git a/libs/webServerAdminPaths.js b/libs/webServerAdminPaths.js index 55f78259..938ac290 100644 --- a/libs/webServerAdminPaths.js +++ b/libs/webServerAdminPaths.js @@ -96,6 +96,7 @@ module.exports = function(s,config,lang,app){ */ app.all(config.webPaths.adminApiPrefix+':auth/accounts/:ke/delete', function (req,res){ s.auth(req.params,function(user){ + const groupKey = req.params.ke; var endData = { ok : false } @@ -106,47 +107,60 @@ module.exports = function(s,config,lang,app){ } var form = s.getPostData(req) || {} var uid = form.uid || s.getPostData(req,'uid',false) - var mail = form.mail || s.getPostData(req,'mail',false) - s.knexQuery({ - action: "delete", - table: "Users", - where: { - ke: req.params.ke, - uid: uid, - mail: mail, - } - }) s.knexQuery({ action: "select", columns: "*", - table: "API", + table: "Users", where: [ - ['ke','=',req.params.ke], + ['ke','=',groupKey], ['uid','=',uid], ] - },function(err,rows){ - if(rows && rows[0]){ - rows.forEach(function(row){ - delete(s.api[row.code]) - }) + },function(err,usersFound){ + const theUserUpForDeletion = usersFound[0] + if(theUserUpForDeletion){ s.knexQuery({ action: "delete", - table: "API", + table: "Users", where: { - ke: req.params.ke, + ke: groupKey, uid: uid, } }) + s.knexQuery({ + action: "select", + columns: "*", + table: "API", + where: [ + ['ke','=',groupKey], + ['uid','=',uid], + ] + },function(err,rows){ + if(rows && rows[0]){ + rows.forEach(function(row){ + delete(s.api[row.code]) + }) + s.knexQuery({ + action: "delete", + table: "API", + where: { + ke: groupKey, + uid: uid, + } + }) + } + }) + s.tx({ + f: 'delete_sub_account', + ke: groupKey, + uid: uid, + mail: theUserUpForDeletion.mail + },'ADM_'+groupKey) + endData.ok = true + }else{ + endData.msg = user.lang['User Not Found'] } + s.closeJsonResponse(res,endData) }) - s.tx({ - f: 'delete_sub_account', - ke: req.params.ke, - uid: uid, - mail: mail - },'ADM_'+req.params.ke) - endData.ok = true - s.closeJsonResponse(res,endData) },res,req) }) /** diff --git a/libs/webServerPaths.js b/libs/webServerPaths.js index 654a3488..1fb2dba3 100644 --- a/libs/webServerPaths.js +++ b/libs/webServerPaths.js @@ -839,13 +839,20 @@ module.exports = function(s,config,lang,app,io){ }else{ const monitorConfig = s.group[groupKey].rawMonitorConfigurations[monitorId] const activeMonitor = s.group[groupKey].activeMonitors[monitorId] - if(!activeMonitor.subStreamProcess){ - response.ok = true - activeMonitor.allowDestroySubstream = false; - spawnSubstreamProcess(monitorConfig) + const substreamConfig = monitorConfig.details.substream + if( + substreamConfig.output + ){ + if(!activeMonitor.subStreamProcess){ + response.ok = true + activeMonitor.allowDestroySubstream = false; + spawnSubstreamProcess(monitorConfig) + }else{ + activeMonitor.allowDestroySubstream = true + await destroySubstreamProcess(activeMonitor) + } }else{ - activeMonitor.allowDestroySubstream = true - await destroySubstreamProcess(activeMonitor) + response.msg = lang['Invalid Settings'] } } s.closeJsonResponse(res,response); @@ -942,6 +949,7 @@ module.exports = function(s,config,lang,app,io){ endTime: req.query.end, startTimeOperator: req.query.startOperator, endTimeOperator: req.query.endOperator, + noLimit: req.query.noLimit, limit: req.query.limit, archived: req.query.archived, endIsStartTo: !!req.query.endIsStartTo, @@ -1014,6 +1022,7 @@ module.exports = function(s,config,lang,app,io){ endTime: req.query.end, startTimeOperator: req.query.startOperator, endTimeOperator: req.query.endOperator, + noLimit: req.query.noLimit, limit: req.query.limit, endIsStartTo: true, parseRowDetails: true, diff --git a/package-lock.json b/package-lock.json index da4c7dfa..0c551b2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,12 +29,14 @@ "mp4frag": "^0.2.0", "mysql": "^2.18.1", "node-fetch": "3.0.0-beta.9", + "node-pushover": "^1.0.0", "node-ssh": "^11.1.1", "node-telegram-bot-api": "^0.52.0", "nodemailer": "^6.4.11", - "pam-diff": "^1.0.0", + "pam-diff": "^1.1.0", "path": "^0.12.7", "pipe2pam": "^0.6.2", + "pixel-change": "^1.1.0", "request": "^2.88.0", "sat": "^0.7.1", "shinobi-onvif": "0.1.9", @@ -69,17 +71,17 @@ } }, "node_modules/@types/ldapjs": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.10.tgz", - "integrity": "sha512-AMkMxkK/wjYtWebNH2O+rARfo7scBpW3T23g6zmGCwDgbyDbR79XWpcSqhPWdU+fChaF+I3dVyl9X2dT1CyI9w==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.11.tgz", + "integrity": "sha512-O4D1frY6xy2mQr5WouNPeltMe5EHdmU4FxbLDC6TMDX5HXOuafusGu+7Y9WAoqBaYHZ5hcFa7jfkpggyexfeXQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -126,9 +128,9 @@ } }, "node_modules/agent-base/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { "ms": "2.1.2" }, @@ -162,9 +164,9 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } @@ -259,9 +261,9 @@ } }, "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dependencies": { "safer-buffer": "~2.1.0" } @@ -275,9 +277,9 @@ } }, "node_modules/assertion-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "engines": { "node": "*" } @@ -291,9 +293,9 @@ } }, "node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", + "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" }, "node_modules/asynckit": { "version": "0.4.0", @@ -320,10 +322,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.924.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.924.0.tgz", - "integrity": "sha512-EwJmZDNhEY1/hrihile8+EdrYrT5VKcLuL5F+OA9L+AYWxNou0i4fP36N5KFtMikkAGB31qhAuRDPcr132RnUw==", - "hasInstallScript": true, + "version": "2.1030.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1030.0.tgz", + "integrity": "sha512-to0STOb8DsSGuSsUb/WCbg/UFnMGfIYavnJH5ZlRCHzvCFjTyR+vfE8ku+qIZvfFM4+5MNTQC/Oxfun2X/TuyA==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -336,7 +337,7 @@ "xml2js": "0.4.19" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.0.0" } }, "node_modules/aws-sign2": { @@ -353,11 +354,11 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "node_modules/axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dependencies": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "node_modules/backblaze-b2": { @@ -487,9 +488,9 @@ "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "engines": { "node": ">=0.6" } @@ -514,15 +515,6 @@ "node": "*" } }, - "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, "node_modules/blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -617,9 +609,9 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", @@ -718,14 +710,19 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "node_modules/chai": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-1.7.2.tgz", - "integrity": "sha1-ugfr1OGsE4opbN9pB3znS39KExc=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dependencies": { - "assertion-error": "1.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">= 0.4.0" + "node": ">=4" } }, "node_modules/chainsaw": { @@ -739,6 +736,14 @@ "node": "*" } }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "engines": { + "node": "*" + } + }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -906,6 +911,25 @@ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, + "node_modules/compute-array-constructors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/compute-array-constructors/-/compute-array-constructors-1.0.1.tgz", + "integrity": "sha1-h+16ZZZo8yv0cM4hybsiSWSJJmU=" + }, + "node_modules/compute-array-dtype": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/compute-array-dtype/-/compute-array-dtype-1.0.1.tgz", + "integrity": "sha1-0EkmtoSQIkWQU5pK6BLxikmY2/M=" + }, + "node_modules/compute-dtype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/compute-dtype/-/compute-dtype-1.0.0.tgz", + "integrity": "sha1-90ZfwmgWbitaK4pktXzsaRGNNXQ=", + "dependencies": { + "compute-array-dtype": "^1.0.0", + "type-name": "^1.0.1" + } + }, "node_modules/compute-incrmmean": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/compute-incrmmean/-/compute-incrmmean-1.0.2.tgz", @@ -914,35 +938,50 @@ "validate.io-positive-integer": "^1.0.0" } }, + "node_modules/compute-indexspace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/compute-indexspace/-/compute-indexspace-1.0.1.tgz", + "integrity": "sha1-2B0KWCFFyW5Ls5k2rr2ubMV+hX8=", + "dependencies": { + "validate.io-nonnegative-integer": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, "node_modules/compute-qmean": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/compute-qmean/-/compute-qmean-1.0.0.tgz", - "integrity": "sha1-e4UvolbK3QTKsqyFNpp2nkfz7S4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compute-qmean/-/compute-qmean-2.0.0.tgz", + "integrity": "sha512-RfK2okcvka8kdc3ePKShaw2DRc5CZZwUFxM4bZA8n/Lb3/zb3H5PtUy46IFApk8HZ3TcFhhgj0nId2ueGwNzwQ==", + "dependencies": { + "compute-array-constructors": "^1.0.0", + "dstructs-matrix": "^2.0.0", + "validate.io-array-like": "^1.0.0", + "validate.io-function": "^1.0.2", + "validate.io-matrix-like": "^1.0.2", + "validate.io-object": "^1.0.4", + "validate.io-positive-integer": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "node_modules/connection-tester": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/connection-tester/-/connection-tester-0.2.1.tgz", "integrity": "sha512-EPARP2G3rGQQFhNozGA/bqq8WBgbZlv7tSJJTWX0EJcBzj5EgXTFBVO5of2JZlYNd3Z1i9sO2GANWWVf4GB21g==" }, + "node_modules/const-max-uint32": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz", + "integrity": "sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY=" + }, + "node_modules/const-pinf-float64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz", + "integrity": "sha1-9u+w15+cCYbT558pI6v5twtj1yY=" + }, "node_modules/content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -992,6 +1031,7 @@ "version": "1.2.15", "resolved": "https://registry.npmjs.org/cws/-/cws-1.2.15.tgz", "integrity": "sha512-H+KHHxkRyAHgJtoEmqjD4owlj/y6u1JCkhxNp7m+XA1Nhd9w56HOquhj8XaGEWjHdXQCk/vND0/NLthLBQr4Sg==", + "deprecated": "Rolling release, please update to 2.0.0", "dependencies": { "ws": "^7.4.6" }, @@ -1042,6 +1082,17 @@ "node": ">=0.10" } }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1109,6 +1160,7 @@ "version": "12.5.3", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "deprecated": "no longer supported", "dependencies": { "@discordjs/collection": "^0.1.6", "@discordjs/form-data": "^3.0.1", @@ -1124,13 +1176,57 @@ } }, "node_modules/discord.js/node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" } }, + "node_modules/dstructs-array-constructors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dstructs-array-constructors/-/dstructs-array-constructors-1.0.2.tgz", + "integrity": "sha1-DwaK1bN9AUpEAhpPnJ3Q2JpSZFo=" + }, + "node_modules/dstructs-array-dtype": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dstructs-array-dtype/-/dstructs-array-dtype-1.0.2.tgz", + "integrity": "sha1-w2j7bkYinfokCfcAzEOiCbSA524=" + }, + "node_modules/dstructs-cast-arrays": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dstructs-cast-arrays/-/dstructs-cast-arrays-1.0.3.tgz", + "integrity": "sha1-8sugaep0MdrV13lgGlHVmXbCvCU=", + "dependencies": { + "dstructs-array-constructors": "^1.0.2", + "dstructs-array-dtype": "^1.0.2", + "type-name": "^1.0.1", + "validate.io-array-like": "^1.0.1" + } + }, + "node_modules/dstructs-matrix": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/dstructs-matrix/-/dstructs-matrix-2.1.2.tgz", + "integrity": "sha1-tJYlYAogtCHGCdGRG7HYOCkHR9o=", + "dependencies": { + "compute-dtype": "^1.0.0", + "compute-indexspace": "^1.0.1", + "dstructs-cast-arrays": "^1.0.2", + "utils-copy": "^1.0.0", + "validate.io-array": "^1.0.6", + "validate.io-contains": "^1.0.0", + "validate.io-function": "^1.0.2", + "validate.io-integer-primitive": "^1.0.0", + "validate.io-nan": "^1.0.3", + "validate.io-nonnegative-integer": "^1.0.0", + "validate.io-nonnegative-integer-array": "^1.0.1", + "validate.io-number-primitive": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, "node_modules/dtrace-provider": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", @@ -1152,6 +1248,28 @@ "readable-stream": "^2.0.2" } }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1246,6 +1364,26 @@ "ms": "2.0.0" } }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/engine.io-parser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", @@ -1280,22 +1418,46 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/engine.io/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -1630,9 +1792,12 @@ "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, "node_modules/fast-xml-parser": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", - "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "dependencies": { + "strnum": "^1.0.4" + }, "bin": { "xml2js": "cli.js" }, @@ -1762,9 +1927,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", "funding": [ { "type": "individual", @@ -1895,9 +2060,9 @@ } }, "node_modules/ftp-srv": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ftp-srv/-/ftp-srv-4.4.0.tgz", - "integrity": "sha512-n/a9Z62VPvgdb/ltPSilSvH+hffGgwCJCVaHmGCVYgYxvh+GlyStapg3TNBXrKstBINRDe5wQGfl03RQ4+b1/w==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/ftp-srv/-/ftp-srv-4.5.0.tgz", + "integrity": "sha512-AzUJwQqLGLndMPpVfGq54CzFZhd1ebFLNfiOatLtRSoNfmLpxQFnmpxwjdOsWChyDk7oWs0Pf5cDarlcFdgPIw==", "dependencies": { "bluebird": "^3.5.1", "bunyan": "^1.8.12", @@ -1920,32 +2085,35 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gaxios": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", - "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", + "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", "dependencies": { "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.1" }, "engines": { "node": ">=10" } }, "node_modules/gaxios/node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { "node": "4.x || >=6.0.0" } }, "node_modules/gcp-metadata": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz", - "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", "dependencies": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -1962,6 +2130,14 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -1975,6 +2151,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -1996,21 +2187,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -2040,9 +2216,9 @@ } }, "node_modules/google-auth-library": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.1.1.tgz", - "integrity": "sha512-+Q1linq/To3DYLyPz4UTEkQ0v5EOXadMM/S+taLV3W9611hq9zqg8kgGApqbTQnggtwdO9yU1y2YT7+83wdTRg==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.2.tgz", + "integrity": "sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==", "dependencies": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -2059,9 +2235,9 @@ } }, "node_modules/google-p12-pem": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", - "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", + "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", "dependencies": { "node-forge": "^0.10.0" }, @@ -2085,9 +2261,9 @@ } }, "node_modules/googleapis-common": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.2.tgz", - "integrity": "sha512-TL7qronKNZwE/XBvqshwzCPmZGq2gz/beXzANF7EVoO7FsQjOd7dk40DYrXkoCpvbnJHCQKWESq6NansiIPFqA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.5.tgz", + "integrity": "sha512-o2dgoW4x4fLIAN+IVAOccz3mEH8Lj1LP9c9BSSvkNJEn+U7UZh0WSr4fdH08x5VH7+sstIpd1lOYFZD0g7j4pw==", "dependencies": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -2109,14 +2285,14 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "node_modules/gtoken": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", - "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", + "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", "dependencies": { "gaxios": "^4.0.0", "google-p12-pem": "^3.0.3", @@ -2195,6 +2371,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -2266,6 +2456,42 @@ "html": "bin/html.js" } }, + "node_modules/html/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/html/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/html/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -2308,6 +2534,14 @@ "npm": ">=1.3.7" } }, + "node_modules/httpreq": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.5.2.tgz", + "integrity": "sha512-2Jm+x9WkExDOeFRrdBCBSpLPT5SokTcRHkunV3pjKmX/cx6av8zQ0WtHUMDrYb6O4hBFzNU6sxJEypvRUVYKnw==", + "engines": { + "node": ">= 6.15.1" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -2321,9 +2555,9 @@ } }, "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { "ms": "2.1.2" }, @@ -2381,6 +2615,19 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -2431,19 +2678,23 @@ } }, "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2458,9 +2709,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "engines": { "node": ">= 0.4" }, @@ -2469,9 +2720,9 @@ } }, "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dependencies": { "has": "^1.0.3" }, @@ -2491,9 +2742,12 @@ } }, "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2542,9 +2796,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2575,9 +2829,12 @@ } }, "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2608,12 +2865,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2633,18 +2890,32 @@ "node": ">=0.10.0" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2682,6 +2953,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -2771,6 +3053,19 @@ "verror": "1.10.0" } }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -2799,9 +3094,9 @@ } }, "node_modules/knex": { - "version": "0.21.19", - "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.19.tgz", - "integrity": "sha512-6etvrq9XI1Ck6mEc/XiXFGVpD1Lmj6v9XWojqZgEbOvyMbW7XRvgZ99yIhN/kaBH+43FEy3xv/AcbRaH+1pJtw==", + "version": "0.21.21", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.21.tgz", + "integrity": "sha512-cjw5qO1EzVKjbywcVa61IQJMLt7PfYBRI/2NwCA/B9beXgbw652wDNLz+JM+UKKNsfwprq0ugYqBYc9q4JN36A==", "dependencies": { "colorette": "1.2.1", "commander": "^6.2.0", @@ -2894,9 +3189,9 @@ } }, "node_modules/ldapjs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-2.3.0.tgz", - "integrity": "sha512-3Rbm3CS7vzTccpP1QnzKCEPok60L/b3BFlWU8r93P5oadCAaqCWEH9Td08crPnw4Ti20W8y0+ZKtFFNzxVu4kA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-2.3.1.tgz", + "integrity": "sha512-kf0tHHLrpwKaBAQOhYHXgdeh2PkFuCCxWgLb1MRn67ZQVo787D2pij3mmHVZx193GIdM8xcfi8HF6AIYYnj0fQ==", "dependencies": { "abstract-logging": "^2.0.0", "asn1": "^0.2.4", @@ -3061,19 +3356,19 @@ } }, "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.48.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -3172,10 +3467,32 @@ "node": "*" } }, + "node_modules/mysql/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/mysql/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "node_modules/nanomatch": { @@ -3221,11 +3538,6 @@ "resolved": "https://registry.npmjs.org/nested-property/-/nested-property-4.0.0.tgz", "integrity": "sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==" }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" - }, "node_modules/node-fetch": { "version": "3.0.0-beta.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", @@ -3250,14 +3562,12 @@ "node": ">= 6.0.0" } }, - "node_modules/node-gyp-build": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", - "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/node-pushover": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-pushover/-/node-pushover-1.0.0.tgz", + "integrity": "sha512-yIIt6a60obTco2/Yr0/9iR4+4sDbDzlM3qpaJ99xnAwFlDeg29V5ur19D2L+S9i5LaBao5yAQKAdpvQ+7kVIng==", + "dependencies": { + "httpreq": "*" } }, "node_modules/node-sha1": { @@ -3301,6 +3611,15 @@ "node": ">=0.12" } }, + "node_modules/node-telegram-bot-api/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "node_modules/node-telegram-bot-api/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -3319,10 +3638,41 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/node-telegram-bot-api/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/node-telegram-bot-api/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-telegram-bot-api/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/nodemailer": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.1.tgz", - "integrity": "sha512-1xzFN3gqv+/qJ6YRyxBxfTYstLNt0FCtZaFRvf4Sg9wxNGWbwFmGXVpfSi6ThGK6aRxAo+KjHtYSW8NvCsNSAg==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.1.tgz", + "integrity": "sha512-E1C8G3rnXrGjznwGP1k+OrW5k4rl0XtqTEB19f7vtJAMYwfxZVSsAu2iY5xJkrZsbVYr6PwwAwRmFlakPoFC0A==", "engines": { "node": ">=6.0.0" } @@ -3414,9 +3764,9 @@ } }, "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3547,12 +3897,15 @@ } }, "node_modules/pam-diff": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pam-diff/-/pam-diff-1.0.0.tgz", - "integrity": "sha512-ihMxKsNC4EDLIqtQbWzWZvvamAvxF0NVLG6p4LPurkYRwBPXJlVjNcvkSMrEy6eIrerhO3V0LVKTxGZYS4aPbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pam-diff/-/pam-diff-1.1.0.tgz", + "integrity": "sha512-4Xo6u4amQzhMcff372t7UfZBqmXd06av/GDVD6dQWyND7a4nW42ScJf5yr2WYf6JHTdPdVG82cDquuJkGI1FYA==", "dependencies": { - "pixel-change": "^1.0.0", + "pixel-change": "1.1.0", "polygon-points": "^0.6.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/parse-filepath": { @@ -3661,29 +4014,14 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "node_modules/pcm-boilerplate": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pcm-boilerplate/-/pcm-boilerplate-0.1.1.tgz", - "integrity": "sha1-y4O0mf4lCMD2wYM4AD/OI54VCTE=", - "dependencies": { - "async": "0.2.x", - "chai": "1.7.x", - "underscore": "1.4.x" - }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "engines": { - "node": ">=0.10" + "node": "*" } }, - "node_modules/pcm-boilerplate/node_modules/async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "node_modules/pcm-boilerplate/node_modules/underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" - }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -3700,13 +4038,31 @@ "integrity": "sha512-gUWldPYgNjCp1q8qKpTsSalDqXWaLlaXVO+la1jgiJMbMlokMdOhzNyVAsRKJR23FVyPOAUHdi2YpDfneSOcbw==" }, "node_modules/pixel-change": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pixel-change/-/pixel-change-1.0.0.tgz", - "integrity": "sha512-wSMUgbWPUWaFqR+rJH3GOrSpRe6MaoHxPaY4NhchhSVeQmKai+8a+zRBn49RJkgRmHx9RzLmQyl1A+qzf5LTWw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixel-change/-/pixel-change-1.1.0.tgz", + "integrity": "sha512-p0J+CXVpeULyzlQTFzRnNcvQnbSn5kOw6qlMWPE09JNybicy/rr6ZC3AS6Z2gKhHINmo62KzynxQNlRIk6YJNQ==", "hasInstallScript": true, "dependencies": { - "node-addon-api": "^1.6.3", - "node-gyp-build": "^3.8.0" + "node-addon-api": "^4.2.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pixel-change/node_modules/node-addon-api": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" + }, + "node_modules/pixel-change/node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, "node_modules/polygon-points": { @@ -3731,9 +4087,9 @@ } }, "node_modules/prism-media": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", - "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", "peerDependencies": { "@discordjs/opus": "^0.5.0", "ffmpeg-static": "^4.2.7 || ^3.0.0 || ^2.4.0", @@ -3785,15 +4141,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3823,6 +4170,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "engines": { "node": ">=0.4.x" } @@ -3854,20 +4202,6 @@ "node": ">= 0.8" } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -3891,6 +4225,11 @@ "node": ">=0.10.0" } }, + "node_modules/regex-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz", + "integrity": "sha1-kEih6uuHD01IDavHb8Qs3MC8OnI=" + }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -4053,6 +4392,21 @@ "rimraf": "bin.js" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4222,14 +4576,33 @@ } }, "node_modules/shinobi-sound-detection": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/shinobi-sound-detection/-/shinobi-sound-detection-0.1.8.tgz", - "integrity": "sha512-rZzLQ+pbJNb4IDV7fljzuGRKrEJcAw01kzB1E0R9F7lwrKXZhLXSD2H32dgQS71+V75308j1uEhv+SYTsfdq7g==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/shinobi-sound-detection/-/shinobi-sound-detection-0.1.12.tgz", + "integrity": "sha512-HbHqHfJJmut4UWRlw+G1f+LIItycyLNdPW5oUd7g8mej+2PiSh0vUvt1ja/cryV0Hj+El9eZZp4xh9V/lFnA9A==", "dependencies": { + "async": "3.2.0", + "chai": "4.3.4", "compute-incrmmean": "^1.0.2", - "compute-qmean": "^1.0.0", - "pcm-boilerplate": "^0.1.1", - "underscore": "^1.8.3" + "compute-qmean": "^2.0.0", + "underscore": "^1.13.1" + } + }, + "node_modules/shinobi-sound-detection/node_modules/async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/smtp-server": { @@ -4245,6 +4618,14 @@ "node": ">=6.0.0" } }, + "node_modules/smtp-server/node_modules/nodemailer": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.1.tgz", + "integrity": "sha512-1xzFN3gqv+/qJ6YRyxBxfTYstLNt0FCtZaFRvf4Sg9wxNGWbwFmGXVpfSi6ThGK6aRxAo+KjHtYSW8NvCsNSAg==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4720,22 +5101,14 @@ "node": ">=0.8.0" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" @@ -4766,16 +5139,21 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, + "node_modules/strnum": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.4.tgz", + "integrity": "sha512-lMzNMfDpaQOLt4B2mEbfzYS0+T7dvCXeojnlGf6f1AygvWDMcWyXYaLbyICfjVu29sErR8fnRagQfBW/N/hGgw==" + }, "node_modules/tarn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.1.tgz", @@ -4870,6 +5248,11 @@ "node": ">=0.8" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "node_modules/traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -4902,6 +5285,14 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -4914,6 +5305,11 @@ "node": ">= 0.6" } }, + "node_modules/type-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-1.1.0.tgz", + "integrity": "sha1-rZw/fDMPWy8I3n159W0rlFHkKw4=" + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -5050,6 +5446,28 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5079,9 +5497,9 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -5118,6 +5536,45 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "node_modules/utils-copy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz", + "integrity": "sha1-biuXmCqozXPhGCo+b4vsPA9AWKc=", + "dependencies": { + "const-pinf-float64": "^1.0.0", + "object-keys": "^1.0.9", + "type-name": "^2.0.0", + "utils-copy-error": "^1.0.0", + "utils-indexof": "^1.0.0", + "utils-regex-from-string": "^1.0.0", + "validate.io-array": "^1.0.3", + "validate.io-buffer": "^1.0.1", + "validate.io-nonnegative-integer": "^1.0.0" + } + }, + "node_modules/utils-copy-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz", + "integrity": "sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U=", + "dependencies": { + "object-keys": "^1.0.9", + "utils-copy": "^1.1.0" + } + }, + "node_modules/utils-copy/node_modules/type-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", + "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=" + }, + "node_modules/utils-indexof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz", + "integrity": "sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w=", + "dependencies": { + "validate.io-array-like": "^1.0.1", + "validate.io-integer-primitive": "^1.0.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -5126,6 +5583,15 @@ "node": ">= 0.4.0" } }, + "node_modules/utils-regex-from-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz", + "integrity": "sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk=", + "dependencies": { + "regex-regex": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, "node_modules/uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -5146,6 +5612,39 @@ "node": ">= 0.10" } }, + "node_modules/validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" + }, + "node_modules/validate.io-array-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz", + "integrity": "sha1-evn363tRcVvrIhVmjsXM5U+t21o=", + "dependencies": { + "const-max-uint32": "^1.0.2", + "validate.io-integer-primitive": "^1.0.0" + } + }, + "node_modules/validate.io-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz", + "integrity": "sha1-hS1nNAIZFNXROvwyUxdh43IO1E4=" + }, + "node_modules/validate.io-contains": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-contains/-/validate.io-contains-1.0.0.tgz", + "integrity": "sha1-vwm6TyfGQlB7CQXbs6dKUncInP4=", + "dependencies": { + "validate.io-array": "^1.0.3", + "validate.io-nan-primitive": "^1.0.0" + } + }, + "node_modules/validate.io-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" + }, "node_modules/validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", @@ -5154,11 +5653,64 @@ "validate.io-number": "^1.0.3" } }, + "node_modules/validate.io-integer-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz", + "integrity": "sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY=", + "dependencies": { + "validate.io-number-primitive": "^1.0.0" + } + }, + "node_modules/validate.io-matrix-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz", + "integrity": "sha1-XsMqddCInaxzbepovdYUWxVe38M=" + }, + "node_modules/validate.io-nan": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-nan/-/validate.io-nan-1.0.3.tgz", + "integrity": "sha1-1DjhOGjJy9N/26EllN5Nj+FEMKQ=" + }, + "node_modules/validate.io-nan-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-nan-primitive/-/validate.io-nan-primitive-1.0.0.tgz", + "integrity": "sha1-R1zC0DXQuvLQCRItg+opGjLX+ww=" + }, + "node_modules/validate.io-nonnegative-integer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz", + "integrity": "sha1-gGkkOgjF+Y6VQTySnf17GPP28p8=", + "dependencies": { + "validate.io-integer": "^1.0.5" + } + }, + "node_modules/validate.io-nonnegative-integer-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer-array/-/validate.io-nonnegative-integer-array-1.0.1.tgz", + "integrity": "sha1-ZjMKZl9VmLlvJfaQgfgfYy6k208=", + "dependencies": { + "validate.io-array": "^1.0.3", + "validate.io-nonnegative-integer": "^1.0.0" + } + }, "node_modules/validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" }, + "node_modules/validate.io-number-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz", + "integrity": "sha1-0uAfICmJNp3PEVVElWQgOv5YTlU=" + }, + "node_modules/validate.io-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/validate.io-object/-/validate.io-object-1.0.4.tgz", + "integrity": "sha1-3KAezu45DhENvCr4Q8gfe/M6Qas=", + "dependencies": { + "validate.io-array": "^1.0.1" + } + }, "node_modules/validate.io-positive-integer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz", @@ -5167,6 +5719,11 @@ "validate.io-integer": "^1.0.5" } }, + "node_modules/validate.io-string-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz", + "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4=" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -5176,9 +5733,9 @@ } }, "node_modules/vasync": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.0.tgz", - "integrity": "sha1-z951GGChWCLbOxMrxZsRakra8Bs=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.1.tgz", + "integrity": "sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==", "engines": [ "node >=0.6.0" ], @@ -5186,7 +5743,7 @@ "verror": "1.10.0" } }, - "node_modules/verror": { + "node_modules/vasync/node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", @@ -5199,6 +5756,19 @@ "extsprintf": "^1.2.0" } }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/webdav": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/webdav/-/webdav-3.6.2.tgz", @@ -5225,6 +5795,20 @@ "webdav": "^3.4.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -5275,9 +5859,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "engines": { "node": ">=8.3.0" }, @@ -5385,17 +5969,17 @@ } }, "@types/ldapjs": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.10.tgz", - "integrity": "sha512-AMkMxkK/wjYtWebNH2O+rARfo7scBpW3T23g6zmGCwDgbyDbR79XWpcSqhPWdU+fChaF+I3dVyl9X2dT1CyI9w==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.11.tgz", + "integrity": "sha512-O4D1frY6xy2mQr5WouNPeltMe5EHdmU4FxbLDC6TMDX5HXOuafusGu+7Y9WAoqBaYHZ5hcFa7jfkpggyexfeXQ==", "requires": { "@types/node": "*" } }, "@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==" }, "abort-controller": { "version": "3.0.0", @@ -5433,9 +6017,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -5459,9 +6043,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -5526,9 +6110,9 @@ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "requires": { "safer-buffer": "~2.1.0" } @@ -5539,9 +6123,9 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "assign-symbols": { "version": "1.0.0", @@ -5549,9 +6133,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", + "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==" }, "asynckit": { "version": "0.4.0", @@ -5569,9 +6153,9 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-sdk": { - "version": "2.924.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.924.0.tgz", - "integrity": "sha512-EwJmZDNhEY1/hrihile8+EdrYrT5VKcLuL5F+OA9L+AYWxNou0i4fP36N5KFtMikkAGB31qhAuRDPcr132RnUw==", + "version": "2.1030.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1030.0.tgz", + "integrity": "sha512-to0STOb8DsSGuSsUb/WCbg/UFnMGfIYavnJH5ZlRCHzvCFjTyR+vfE8ku+qIZvfFM4+5MNTQC/Oxfun2X/TuyA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -5595,11 +6179,11 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { - "follow-redirects": "^1.10.0" + "follow-redirects": "^1.14.0" } }, "backblaze-b2": { @@ -5701,9 +6285,9 @@ "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" }, "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "bignumber.js": { "version": "9.0.1", @@ -5719,15 +6303,6 @@ "chainsaw": "~0.1.0" } }, - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -5812,9 +6387,9 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-indexof-polyfill": { "version": "1.0.2", @@ -5886,11 +6461,16 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chai": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-1.7.2.tgz", - "integrity": "sha1-ugfr1OGsE4opbN9pB3znS39KExc=", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "requires": { - "assertion-error": "1.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" } }, "chainsaw": { @@ -5901,6 +6481,11 @@ "traverse": ">=0.3.0 <0.4" } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -6038,6 +6623,25 @@ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, + "compute-array-constructors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/compute-array-constructors/-/compute-array-constructors-1.0.1.tgz", + "integrity": "sha1-h+16ZZZo8yv0cM4hybsiSWSJJmU=" + }, + "compute-array-dtype": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/compute-array-dtype/-/compute-array-dtype-1.0.1.tgz", + "integrity": "sha1-0EkmtoSQIkWQU5pK6BLxikmY2/M=" + }, + "compute-dtype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/compute-dtype/-/compute-dtype-1.0.0.tgz", + "integrity": "sha1-90ZfwmgWbitaK4pktXzsaRGNNXQ=", + "requires": { + "compute-array-dtype": "^1.0.0", + "type-name": "^1.0.1" + } + }, "compute-incrmmean": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/compute-incrmmean/-/compute-incrmmean-1.0.2.tgz", @@ -6046,32 +6650,50 @@ "validate.io-positive-integer": "^1.0.0" } }, + "compute-indexspace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/compute-indexspace/-/compute-indexspace-1.0.1.tgz", + "integrity": "sha1-2B0KWCFFyW5Ls5k2rr2ubMV+hX8=", + "requires": { + "validate.io-nonnegative-integer": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, "compute-qmean": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/compute-qmean/-/compute-qmean-1.0.0.tgz", - "integrity": "sha1-e4UvolbK3QTKsqyFNpp2nkfz7S4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compute-qmean/-/compute-qmean-2.0.0.tgz", + "integrity": "sha512-RfK2okcvka8kdc3ePKShaw2DRc5CZZwUFxM4bZA8n/Lb3/zb3H5PtUy46IFApk8HZ3TcFhhgj0nId2ueGwNzwQ==", + "requires": { + "compute-array-constructors": "^1.0.0", + "dstructs-matrix": "^2.0.0", + "validate.io-array-like": "^1.0.0", + "validate.io-function": "^1.0.2", + "validate.io-matrix-like": "^1.0.2", + "validate.io-object": "^1.0.4", + "validate.io-positive-integer": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "connection-tester": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/connection-tester/-/connection-tester-0.2.1.tgz", "integrity": "sha512-EPARP2G3rGQQFhNozGA/bqq8WBgbZlv7tSJJTWX0EJcBzj5EgXTFBVO5of2JZlYNd3Z1i9sO2GANWWVf4GB21g==" }, + "const-max-uint32": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz", + "integrity": "sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY=" + }, + "const-pinf-float64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz", + "integrity": "sha1-9u+w15+cCYbT558pI6v5twtj1yY=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -6144,6 +6766,14 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -6205,12 +6835,56 @@ }, "dependencies": { "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, + "dstructs-array-constructors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dstructs-array-constructors/-/dstructs-array-constructors-1.0.2.tgz", + "integrity": "sha1-DwaK1bN9AUpEAhpPnJ3Q2JpSZFo=" + }, + "dstructs-array-dtype": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dstructs-array-dtype/-/dstructs-array-dtype-1.0.2.tgz", + "integrity": "sha1-w2j7bkYinfokCfcAzEOiCbSA524=" + }, + "dstructs-cast-arrays": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dstructs-cast-arrays/-/dstructs-cast-arrays-1.0.3.tgz", + "integrity": "sha1-8sugaep0MdrV13lgGlHVmXbCvCU=", + "requires": { + "dstructs-array-constructors": "^1.0.2", + "dstructs-array-dtype": "^1.0.2", + "type-name": "^1.0.1", + "validate.io-array-like": "^1.0.1" + } + }, + "dstructs-matrix": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/dstructs-matrix/-/dstructs-matrix-2.1.2.tgz", + "integrity": "sha1-tJYlYAogtCHGCdGRG7HYOCkHR9o=", + "requires": { + "compute-dtype": "^1.0.0", + "compute-indexspace": "^1.0.1", + "dstructs-cast-arrays": "^1.0.2", + "utils-copy": "^1.0.0", + "validate.io-array": "^1.0.6", + "validate.io-contains": "^1.0.0", + "validate.io-function": "^1.0.2", + "validate.io-integer-primitive": "^1.0.0", + "validate.io-nan": "^1.0.3", + "validate.io-nonnegative-integer": "^1.0.0", + "validate.io-nonnegative-integer-array": "^1.0.1", + "validate.io-number-primitive": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, "dtrace-provider": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", @@ -6226,6 +6900,30 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "requires": { "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "ecc-jsbn": { @@ -6303,6 +7001,12 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} } } }, @@ -6331,6 +7035,12 @@ "requires": { "ms": "2.0.0" } + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} } } }, @@ -6347,21 +7057,25 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -6623,9 +7337,12 @@ "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, "fast-xml-parser": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", - "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz", + "integrity": "sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==", + "requires": { + "strnum": "^1.0.4" + } }, "fetch-blob": { "version": "2.1.2", @@ -6715,9 +7432,9 @@ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" }, "for-in": { "version": "1.0.2", @@ -6806,9 +7523,9 @@ } }, "ftp-srv": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ftp-srv/-/ftp-srv-4.4.0.tgz", - "integrity": "sha512-n/a9Z62VPvgdb/ltPSilSvH+hffGgwCJCVaHmGCVYgYxvh+GlyStapg3TNBXrKstBINRDe5wQGfl03RQ4+b1/w==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/ftp-srv/-/ftp-srv-4.5.0.tgz", + "integrity": "sha512-AzUJwQqLGLndMPpVfGq54CzFZhd1ebFLNfiOatLtRSoNfmLpxQFnmpxwjdOsWChyDk7oWs0Pf5cDarlcFdgPIw==", "requires": { "bluebird": "^3.5.1", "bunyan": "^1.8.12", @@ -6825,28 +7542,31 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gaxios": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.0.tgz", - "integrity": "sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.2.tgz", + "integrity": "sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q==", "requires": { "abort-controller": "^3.0.0", "extend": "^3.0.2", "https-proxy-agent": "^5.0.0", "is-stream": "^2.0.0", - "node-fetch": "^2.3.0" + "node-fetch": "^2.6.1" }, "dependencies": { "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "requires": { + "whatwg-url": "^5.0.0" + } } } }, "gcp-metadata": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.2.1.tgz", - "integrity": "sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", + "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", "requires": { "gaxios": "^4.0.0", "json-bigint": "^1.0.0" @@ -6857,6 +7577,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -6867,6 +7592,15 @@ "has-symbols": "^1.0.1" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -6885,18 +7619,6 @@ "assert-plus": "^1.0.0" } }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -6920,9 +7642,9 @@ } }, "google-auth-library": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.1.1.tgz", - "integrity": "sha512-+Q1linq/To3DYLyPz4UTEkQ0v5EOXadMM/S+taLV3W9611hq9zqg8kgGApqbTQnggtwdO9yU1y2YT7+83wdTRg==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.10.2.tgz", + "integrity": "sha512-M37o9Kxa/TLvOLgF71SXvLeVEP5sbSTmKl1zlIgl72SFy5PtsU3pOdu8G8MIHHpQ3/NZabDI8rQkA9DvQVKkPA==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", @@ -6936,9 +7658,9 @@ } }, "google-p12-pem": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.3.tgz", - "integrity": "sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.2.tgz", + "integrity": "sha512-tjf3IQIt7tWCDsa0ofDQ1qqSCNzahXDxdAGJDbruWqu3eCg5CKLYKN+hi0s6lfvzYZ1GDVr+oDF9OOWlDSdf0A==", "requires": { "node-forge": "^0.10.0" } @@ -6953,9 +7675,9 @@ } }, "googleapis-common": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.2.tgz", - "integrity": "sha512-TL7qronKNZwE/XBvqshwzCPmZGq2gz/beXzANF7EVoO7FsQjOd7dk40DYrXkoCpvbnJHCQKWESq6NansiIPFqA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-5.0.5.tgz", + "integrity": "sha512-o2dgoW4x4fLIAN+IVAOccz3mEH8Lj1LP9c9BSSvkNJEn+U7UZh0WSr4fdH08x5VH7+sstIpd1lOYFZD0g7j4pw==", "requires": { "extend": "^3.0.2", "gaxios": "^4.0.0", @@ -6973,14 +7695,14 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "gtoken": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", - "integrity": "sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.3.1.tgz", + "integrity": "sha512-yqOREjzLHcbzz1UrQoxhBtpk8KjrVhuqPE7od1K2uhyxG2BHjKZetlbLw/SPZak/QqTIQW+addS+EcjqQsZbwQ==", "requires": { "gaxios": "^4.0.0", "google-p12-pem": "^3.0.3", @@ -7039,6 +7761,14 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -7092,6 +7822,41 @@ "integrity": "sha1-pUT6nqVJK/s6LMqCEKEL57WvH2E=", "requires": { "concat-stream": "^1.4.7" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "http-errors": { @@ -7126,6 +7891,11 @@ "sshpk": "^1.7.0" } }, + "httpreq": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.5.2.tgz", + "integrity": "sha512-2Jm+x9WkExDOeFRrdBCBSpLPT5SokTcRHkunV3pjKmX/cx6av8zQ0WtHUMDrYb6O4hBFzNU6sxJEypvRUVYKnw==" + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -7136,9 +7906,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -7187,6 +7957,16 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -7225,16 +8005,20 @@ } }, "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } }, "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-buffer": { @@ -7243,14 +8027,14 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "requires": { "has": "^1.0.3" } @@ -7264,9 +8048,12 @@ } }, "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-descriptor": { "version": "1.0.2", @@ -7297,9 +8084,9 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } @@ -7328,9 +8115,12 @@ } }, "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-plain-object": { "version": "2.0.4", @@ -7341,12 +8131,12 @@ } }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-relative": { @@ -7357,15 +8147,23 @@ "is-unc-path": "^1.0.0" } }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -7388,6 +8186,14 @@ "unc-path-regex": "^0.1.2" } }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "requires": { + "call-bind": "^1.0.0" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -7463,6 +8269,18 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" + }, + "dependencies": { + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } } }, "jwa": { @@ -7490,9 +8308,9 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "knex": { - "version": "0.21.19", - "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.19.tgz", - "integrity": "sha512-6etvrq9XI1Ck6mEc/XiXFGVpD1Lmj6v9XWojqZgEbOvyMbW7XRvgZ99yIhN/kaBH+43FEy3xv/AcbRaH+1pJtw==", + "version": "0.21.21", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.21.tgz", + "integrity": "sha512-cjw5qO1EzVKjbywcVa61IQJMLt7PfYBRI/2NwCA/B9beXgbw652wDNLz+JM+UKKNsfwprq0ugYqBYc9q4JN36A==", "requires": { "colorette": "1.2.1", "commander": "^6.2.0", @@ -7543,9 +8361,9 @@ } }, "ldapjs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-2.3.0.tgz", - "integrity": "sha512-3Rbm3CS7vzTccpP1QnzKCEPok60L/b3BFlWU8r93P5oadCAaqCWEH9Td08crPnw4Ti20W8y0+ZKtFFNzxVu4kA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-2.3.1.tgz", + "integrity": "sha512-kf0tHHLrpwKaBAQOhYHXgdeh2PkFuCCxWgLb1MRn67ZQVo787D2pij3mmHVZx193GIdM8xcfi8HF6AIYYnj0fQ==", "requires": { "abstract-logging": "^2.0.0", "asn1": "^0.2.4", @@ -7668,16 +8486,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.51.0" } }, "minimatch": { @@ -7751,13 +8569,35 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "nanomatch": { @@ -7794,11 +8634,6 @@ "resolved": "https://registry.npmjs.org/nested-property/-/nested-property-4.0.0.tgz", "integrity": "sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==" }, - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" - }, "node-fetch": { "version": "3.0.0-beta.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", @@ -7813,10 +8648,13 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, - "node-gyp-build": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", - "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==" + "node-pushover": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-pushover/-/node-pushover-1.0.0.tgz", + "integrity": "sha512-yIIt6a60obTco2/Yr0/9iR4+4sDbDzlM3qpaJ99xnAwFlDeg29V5ur19D2L+S9i5LaBao5yAQKAdpvQ+7kVIng==", + "requires": { + "httpreq": "*" + } }, "node-sha1": { "version": "1.0.1", @@ -7853,6 +8691,15 @@ "request-promise": "^4.2.2" }, "dependencies": { + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -7870,13 +8717,44 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, "nodemailer": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.1.tgz", - "integrity": "sha512-1xzFN3gqv+/qJ6YRyxBxfTYstLNt0FCtZaFRvf4Sg9wxNGWbwFmGXVpfSi6ThGK6aRxAo+KjHtYSW8NvCsNSAg==" + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.1.tgz", + "integrity": "sha512-E1C8G3rnXrGjznwGP1k+OrW5k4rl0XtqTEB19f7vtJAMYwfxZVSsAu2iY5xJkrZsbVYr6PwwAwRmFlakPoFC0A==" }, "oauth-sign": { "version": "0.9.0", @@ -7945,9 +8823,9 @@ } }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" }, "object-keys": { "version": "1.1.1", @@ -8039,11 +8917,11 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pam-diff": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pam-diff/-/pam-diff-1.0.0.tgz", - "integrity": "sha512-ihMxKsNC4EDLIqtQbWzWZvvamAvxF0NVLG6p4LPurkYRwBPXJlVjNcvkSMrEy6eIrerhO3V0LVKTxGZYS4aPbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pam-diff/-/pam-diff-1.1.0.tgz", + "integrity": "sha512-4Xo6u4amQzhMcff372t7UfZBqmXd06av/GDVD6dQWyND7a4nW42ScJf5yr2WYf6JHTdPdVG82cDquuJkGI1FYA==", "requires": { - "pixel-change": "^1.0.0", + "pixel-change": "1.1.0", "polygon-points": "^0.6.0" } }, @@ -8129,27 +9007,10 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "pcm-boilerplate": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pcm-boilerplate/-/pcm-boilerplate-0.1.1.tgz", - "integrity": "sha1-y4O0mf4lCMD2wYM4AD/OI54VCTE=", - "requires": { - "async": "0.2.x", - "chai": "1.7.x", - "underscore": "1.4.x" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" - } - } + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" }, "performance-now": { "version": "2.1.0", @@ -8167,12 +9028,24 @@ "integrity": "sha512-gUWldPYgNjCp1q8qKpTsSalDqXWaLlaXVO+la1jgiJMbMlokMdOhzNyVAsRKJR23FVyPOAUHdi2YpDfneSOcbw==" }, "pixel-change": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pixel-change/-/pixel-change-1.0.0.tgz", - "integrity": "sha512-wSMUgbWPUWaFqR+rJH3GOrSpRe6MaoHxPaY4NhchhSVeQmKai+8a+zRBn49RJkgRmHx9RzLmQyl1A+qzf5LTWw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixel-change/-/pixel-change-1.1.0.tgz", + "integrity": "sha512-p0J+CXVpeULyzlQTFzRnNcvQnbSn5kOw6qlMWPE09JNybicy/rr6ZC3AS6Z2gKhHINmo62KzynxQNlRIk6YJNQ==", "requires": { - "node-addon-api": "^1.6.3", - "node-gyp-build": "^3.8.0" + "node-addon-api": "^4.2.0", + "node-gyp-build": "^4.3.0" + }, + "dependencies": { + "node-addon-api": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", + "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + } } }, "polygon-points": { @@ -8191,9 +9064,9 @@ "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" }, "prism-media": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", - "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", "requires": {} }, "process": { @@ -8220,15 +9093,6 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -8270,20 +9134,6 @@ "unpipe": "1.0.0" } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -8301,6 +9151,11 @@ "safe-regex": "^1.1.0" } }, + "regex-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz", + "integrity": "sha1-kEih6uuHD01IDavHb8Qs3MC8OnI=" + }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -8421,6 +9276,20 @@ "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "requires": { "glob": "^6.0.1" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "safe-buffer": { @@ -8569,14 +9438,32 @@ } }, "shinobi-sound-detection": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/shinobi-sound-detection/-/shinobi-sound-detection-0.1.8.tgz", - "integrity": "sha512-rZzLQ+pbJNb4IDV7fljzuGRKrEJcAw01kzB1E0R9F7lwrKXZhLXSD2H32dgQS71+V75308j1uEhv+SYTsfdq7g==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/shinobi-sound-detection/-/shinobi-sound-detection-0.1.12.tgz", + "integrity": "sha512-HbHqHfJJmut4UWRlw+G1f+LIItycyLNdPW5oUd7g8mej+2PiSh0vUvt1ja/cryV0Hj+El9eZZp4xh9V/lFnA9A==", "requires": { + "async": "3.2.0", + "chai": "4.3.4", "compute-incrmmean": "^1.0.2", - "compute-qmean": "^1.0.0", - "pcm-boilerplate": "^0.1.1", - "underscore": "^1.8.3" + "compute-qmean": "^2.0.0", + "underscore": "^1.13.1" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + } + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "smtp-server": { @@ -8587,6 +9474,13 @@ "base32.js": "0.1.0", "ipv6-normalize": "1.0.1", "nodemailer": "6.6.1" + }, + "dependencies": { + "nodemailer": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.1.tgz", + "integrity": "sha512-1xzFN3gqv+/qJ6YRyxBxfTYstLNt0FCtZaFRvf4Sg9wxNGWbwFmGXVpfSi6ThGK6aRxAo+KjHtYSW8NvCsNSAg==" + } } }, "snapdragon": { @@ -8988,22 +9882,14 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "string.prototype.trimend": { @@ -9025,13 +9911,18 @@ } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, + "strnum": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.4.tgz", + "integrity": "sha512-lMzNMfDpaQOLt4B2mEbfzYS0+T7dvCXeojnlGf6f1AygvWDMcWyXYaLbyICfjVu29sErR8fnRagQfBW/N/hGgw==" + }, "tarn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.1.tgz", @@ -9104,6 +9995,11 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -9127,6 +10023,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -9136,6 +10037,11 @@ "mime-types": "~2.1.24" } }, + "type-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-1.1.0.tgz", + "integrity": "sha1-rZw/fDMPWy8I3n159W0rlFHkKw4=" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -9247,6 +10153,28 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } } } }, @@ -9285,9 +10213,9 @@ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -9316,11 +10244,61 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "utils-copy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz", + "integrity": "sha1-biuXmCqozXPhGCo+b4vsPA9AWKc=", + "requires": { + "const-pinf-float64": "^1.0.0", + "object-keys": "^1.0.9", + "type-name": "^2.0.0", + "utils-copy-error": "^1.0.0", + "utils-indexof": "^1.0.0", + "utils-regex-from-string": "^1.0.0", + "validate.io-array": "^1.0.3", + "validate.io-buffer": "^1.0.1", + "validate.io-nonnegative-integer": "^1.0.0" + }, + "dependencies": { + "type-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz", + "integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q=" + } + } + }, + "utils-copy-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz", + "integrity": "sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U=", + "requires": { + "object-keys": "^1.0.9", + "utils-copy": "^1.1.0" + } + }, + "utils-indexof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz", + "integrity": "sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w=", + "requires": { + "validate.io-array-like": "^1.0.1", + "validate.io-integer-primitive": "^1.0.0" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "utils-regex-from-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz", + "integrity": "sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk=", + "requires": { + "regex-regex": "^1.0.0", + "validate.io-string-primitive": "^1.0.0" + } + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -9334,6 +10312,39 @@ "homedir-polyfill": "^1.0.1" } }, + "validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" + }, + "validate.io-array-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz", + "integrity": "sha1-evn363tRcVvrIhVmjsXM5U+t21o=", + "requires": { + "const-max-uint32": "^1.0.2", + "validate.io-integer-primitive": "^1.0.0" + } + }, + "validate.io-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz", + "integrity": "sha1-hS1nNAIZFNXROvwyUxdh43IO1E4=" + }, + "validate.io-contains": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-contains/-/validate.io-contains-1.0.0.tgz", + "integrity": "sha1-vwm6TyfGQlB7CQXbs6dKUncInP4=", + "requires": { + "validate.io-array": "^1.0.3", + "validate.io-nan-primitive": "^1.0.0" + } + }, + "validate.io-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" + }, "validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", @@ -9342,11 +10353,64 @@ "validate.io-number": "^1.0.3" } }, + "validate.io-integer-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz", + "integrity": "sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY=", + "requires": { + "validate.io-number-primitive": "^1.0.0" + } + }, + "validate.io-matrix-like": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz", + "integrity": "sha1-XsMqddCInaxzbepovdYUWxVe38M=" + }, + "validate.io-nan": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-nan/-/validate.io-nan-1.0.3.tgz", + "integrity": "sha1-1DjhOGjJy9N/26EllN5Nj+FEMKQ=" + }, + "validate.io-nan-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-nan-primitive/-/validate.io-nan-primitive-1.0.0.tgz", + "integrity": "sha1-R1zC0DXQuvLQCRItg+opGjLX+ww=" + }, + "validate.io-nonnegative-integer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz", + "integrity": "sha1-gGkkOgjF+Y6VQTySnf17GPP28p8=", + "requires": { + "validate.io-integer": "^1.0.5" + } + }, + "validate.io-nonnegative-integer-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer-array/-/validate.io-nonnegative-integer-array-1.0.1.tgz", + "integrity": "sha1-ZjMKZl9VmLlvJfaQgfgfYy6k208=", + "requires": { + "validate.io-array": "^1.0.3", + "validate.io-nonnegative-integer": "^1.0.0" + } + }, "validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" }, + "validate.io-number-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz", + "integrity": "sha1-0uAfICmJNp3PEVVElWQgOv5YTlU=" + }, + "validate.io-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/validate.io-object/-/validate.io-object-1.0.4.tgz", + "integrity": "sha1-3KAezu45DhENvCr4Q8gfe/M6Qas=", + "requires": { + "validate.io-array": "^1.0.1" + } + }, "validate.io-positive-integer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz", @@ -9355,23 +10419,40 @@ "validate.io-integer": "^1.0.5" } }, + "validate.io-string-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz", + "integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4=" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vasync": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.0.tgz", - "integrity": "sha1-z951GGChWCLbOxMrxZsRakra8Bs=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-2.2.1.tgz", + "integrity": "sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==", "requires": { "verror": "1.10.0" + }, + "dependencies": { + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } } }, "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -9403,6 +10484,20 @@ "webdav": "^3.4.0" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -9444,9 +10539,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "requires": {} }, "xml2js": { diff --git a/package.json b/package.json index d830627d..0b2915ad 100644 --- a/package.json +++ b/package.json @@ -35,13 +35,14 @@ "mp4frag": "^0.2.0", "mysql": "^2.18.1", "node-fetch": "3.0.0-beta.9", + "node-pushover": "^1.0.0", "node-ssh": "^11.1.1", "node-telegram-bot-api": "^0.52.0", "nodemailer": "^6.4.11", - "node-pushover": "^1.0.0", - "pam-diff": "^1.0.0", + "pam-diff": "^1.1.0", "path": "^0.12.7", "pipe2pam": "^0.6.2", + "pixel-change": "^1.1.0", "request": "^2.88.0", "sat": "^0.7.1", "shinobi-onvif": "0.1.9", @@ -69,9 +70,9 @@ "node12" ], "scripts": [ - "libs/cameraThread/detector.js", - "libs/cameraThread/singleCamera.js", - "libs/cameraThread/snapshot.js" + "libs/cameraThread/detector.js", + "libs/cameraThread/singleCamera.js", + "libs/cameraThread/snapshot.js" ], "assets": [ "definitions/**/*", diff --git a/web/assets/css/bs5.powerVideo.css b/web/assets/css/bs5.powerVideo.css index 7572f261..42f23544 100644 --- a/web/assets/css/bs5.powerVideo.css +++ b/web/assets/css/bs5.powerVideo.css @@ -179,3 +179,7 @@ #powerVideo .vis-item.vis-box { border-radius: 5px; } + +#powerVideo .vis-labelset .vis-label { + color: #fff; +} diff --git a/web/assets/css/bs5.timelapseViewer.css b/web/assets/css/bs5.timelapseViewer.css index 458efda5..4cbbe338 100644 --- a/web/assets/css/bs5.timelapseViewer.css +++ b/web/assets/css/bs5.timelapseViewer.css @@ -30,6 +30,7 @@ #tab-timelapseViewer .frameIcons{ overflow-y: auto; overflow-x: hidden; + max-height: 400px; } #tab-timelapseViewer .frameIcons .frame{ background-size: cover; diff --git a/web/assets/css/bs5.videoPlayer.css b/web/assets/css/bs5.videoPlayer.css index 46bea314..08f51d9f 100644 --- a/web/assets/css/bs5.videoPlayer.css +++ b/web/assets/css/bs5.videoPlayer.css @@ -29,3 +29,40 @@ .tab-videoPlayer:hover .tab-videoPlayer-event-objects { display: none; } + +/* video-time-strip */ +.video-time-img { + background-color: #000; + background-size: contain; + background-position: center; + min-height: 400px; + background-repeat: no-repeat; +} +.video-time-img:not(.video-time-no-img) .card-body:hover { + background: rgba(0,0,0,0.9); + color: #fff; +} +.video-time-strip { + min-height: 30px; + position: relative; +} +.video-time-needle { + position: absolute; + border-left: 3px solid #1f80f9; + height: 100%; + transition: none; + top: 0; +} +.video-time-needle-event { + border-left: 3px solid #f9f21f; +} +.video-day-slice { + height: 100%; +} +.video-time-header { + position: absolute; + left: 0; + top: 0; + width: 100%; + background: rgba(0,0,0,0.6) +} diff --git a/web/assets/css/dashboard.css b/web/assets/css/dashboard.css index bc86f1bd..fef3038c 100644 --- a/web/assets/css/dashboard.css +++ b/web/assets/css/dashboard.css @@ -383,3 +383,36 @@ ul.squeeze { align-items: center; justify-content: center; } + +/* Shake Animation */ +.animate-shake { + animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + perspective: 1000px; +} + +.animate-shake-hover:hover { + animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + perspective: 1000px; +} + +@keyframes shake { + 10%, 90% { + transform: translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: translate3d(4px, 0, 0); + } +} diff --git a/web/assets/js/bs5.apiKeys.js b/web/assets/js/bs5.apiKeys.js index bab34375..1ae619d7 100644 --- a/web/assets/js/bs5.apiKeys.js +++ b/web/assets/js/bs5.apiKeys.js @@ -48,7 +48,7 @@ $(document).ready(function(e){ detailsElement.val(JSON.stringify(details)) } var getApiKeys = function(callback){ - $.get(getApiPrefix('api') + '/list',function(data){ + $.getJSON(getApiPrefix('api') + '/list',function(data){ callback(data.keys) }) } diff --git a/web/assets/js/bs5.cameraProbe.js b/web/assets/js/bs5.cameraProbe.js index 61692cc2..570dee7c 100644 --- a/web/assets/js/bs5.cameraProbe.js +++ b/web/assets/js/bs5.cameraProbe.js @@ -25,7 +25,7 @@ $(document).ready(function(e){ var form = el.serializeObject() var flags = 'default' var url = form.url.trim() - $.get(`${getApiPrefix()}/probe/${$user.ke}?url=${url}`,function(data){ + $.getJSON(`${getApiPrefix()}/probe/${$user.ke}?url=${url}`,function(data){ if(data.ok === true){ var html try{ diff --git a/web/assets/js/bs5.configFinder.js b/web/assets/js/bs5.configFinder.js index a8cc552b..1210590d 100644 --- a/web/assets/js/bs5.configFinder.js +++ b/web/assets/js/bs5.configFinder.js @@ -25,7 +25,7 @@ $(document).ready(function(){ } var getConfigurationsFromHub = function(rowLimit,skipOver,explore,searchQuery,sortBy,sortDirection,callback){ // $.get(,callback) - $.get(`https://hub.shinobi.video/searchConfiguration?skipOver=${skipOver}&rowLimit=${rowLimit}&sortBy=${sortBy}&sortDirection=${sortDirection}${searchQuery ? `&text=${searchQuery}` : ''}`,function(data){ + $.getJSON(`https://hub.shinobi.video/searchConfiguration?skipOver=${skipOver}&rowLimit=${rowLimit}&sortBy=${sortBy}&sortDirection=${sortDirection}${searchQuery ? `&text=${searchQuery}` : ''}`,function(data){ callback(data) // $.get(getApiPrefix() + `/getShinobiHubConfigurations/${$user.ke}/cam?rowLimit=${rowLimit}&skipOver=${skipOver}&explore=${explore ? explore : "0"}&search=${searchQuery}&sortDirection=${sortDirection}&sortBy=${sortBy}`,function(privateData){ // callback(data.concat(privateData || [])) diff --git a/web/assets/js/bs5.dashboard-base.js b/web/assets/js/bs5.dashboard-base.js index 85bd4899..afa5d0dd 100644 --- a/web/assets/js/bs5.dashboard-base.js +++ b/web/assets/js/bs5.dashboard-base.js @@ -71,6 +71,9 @@ function base64ArrayBuffer(arrayBuffer) { return base64 } +function getLocationPathName(){ + return location.pathname.endsWith('/') ? location.pathname : location.pathname +} function debugLog(...args){ console.log(...args) } @@ -198,7 +201,7 @@ function liveStamp(){ } function loadMonitorsIntoMemory(callback){ - $.get(`${getApiPrefix(`monitor`)}`,function(data){ + $.getJSON(`${getApiPrefix(`monitor`)}`,function(data){ $.each(data,function(n,monitor){ monitor.details = safeJsonParse(monitor.details) loadedMonitors[monitor.mid] = monitor @@ -261,6 +264,10 @@ function blipTo(xPageValue,yPageValue){ function openTab(theTab,loadData,backAction,haltTrigger,type){ loadData = loadData ? loadData : {} + if(tabTree && tabTree.back && tabTree.back.name === theTab){ + goBackOneTab() + return; + } saveTabBlipPosition(activeTabName) var allTabs = $('.page-tab'); allTabs.hide().removeClass('tab-active'); @@ -578,7 +585,7 @@ function diffObject(obj1, obj2) { function getAllSectionsFromDefinition(definitionsBase){ var sections = {} var addSection = function(section,parentName){ - sections[section.name] = { + sections[section.id + section.name] = { name: section.name, id: section.id, color: section.color, @@ -593,7 +600,7 @@ function getAllSectionsFromDefinition(definitionsBase){ } if(section.blocks){ $.each(section.blocks,function(m,block){ - addSection(block) + addSection(block,section.name) }) } } @@ -677,14 +684,28 @@ function drawMonitorListToSelector(jqTarget,selectFirst,showId){ .change() } } +var logWriterIconIndicator = $('#side-menu-link-logViewer i') +var logWriterIconIndicatorShaking = false +var logWriterIconIndicatorTimeout = null +function shakeLogWriterIcon(){ + if(logWriterIconIndicatorShaking)return; + logWriterIconIndicatorShaking = true; + logWriterIconIndicator.addClass('animate-shake') + logWriterIconIndicatorTimeout = setTimeout(function(){ + logWriterIconIndicatorShaking = false; + logWriterIconIndicator.removeClass('animate-shake') + },3000) +} var logWriterFloodTimeout = null var logWriterFloodCounter = 0 var logWriterFloodLock = null function buildLogRow(v){ + var monitor = loadedMonitors[v.mid] + var humanMonitorName = monitor ? monitor.name + ` (${monitor.mid}) : ` : '' var html = '' - html += `
+ html += `
- ${v.info && v.info.type ? v.info.type : v.mid} + ${humanMonitorName}${v.info && v.info.type ? v.info.type : v.mid}
${jsonToHtmlBlock(v.info.msg)}
@@ -718,10 +739,12 @@ function logWriterDraw(id,data){ info: data.log, time: data.time, }) + shakeLogWriterIcon() $(elementTags).prepend(html).each(function(n,v){ var el = $(v); - if(el.find('.log-item').length > 10){ - v.find('.log-item:last').remove() + var theRows = el.find('.log-item') + if(theRows.length > 10){ + theRows.last().remove() } }) } @@ -853,6 +876,14 @@ $(document).ready(function(){ deleteTab(tabName) return false; }) + .on('click','.delete-tab-dynamic',function(e){ + e.preventDefault() + e.stopPropagation() + var tabName = $(this).parents('.page-tab').attr('id').replace('tab-','') + goBackOneTab() + deleteTab(tabName) + return false; + }) .on('click','[page-open]',function(){ var el = $(this) var pageChoice = el.attr('page-open') diff --git a/web/assets/js/bs5.eventListWithPics.js b/web/assets/js/bs5.eventListWithPics.js index 2af580b0..829fa842 100644 --- a/web/assets/js/bs5.eventListWithPics.js +++ b/web/assets/js/bs5.eventListWithPics.js @@ -145,9 +145,9 @@ $(document).ready(function(){ eventEndTime = formattedTimeForFilename(options.endDate,false) requestQueries.push(`end=${eventEndTime}`) } - $.get(`${getApiPrefix(`videos`)}${monitorId ? `/${monitorId}` : ''}?${requestQueries.concat([`limit=${limit}`]).join('&')}`,function(data){ + $.getJSON(`${getApiPrefix(`videos`)}${monitorId ? `/${monitorId}` : ''}?${requestQueries.concat([`limit=${limit}`]).join('&')}`,function(data){ var videos = data.videos - $.get(`${getApiPrefix(`events`)}${monitorId ? `/${monitorId}` : ''}?${requestQueries.join('&')}`,function(eventData){ + $.getJSON(`${getApiPrefix(`events`)}${monitorId ? `/${monitorId}` : ''}?${requestQueries.join('&')}`,function(eventData){ var newEventList = applyVideosToEventsList(videos,eventData) $.each(newEventList,function(n,event){ loadedEventsInMemory[`${event.mid}${event.time}`] = event diff --git a/web/assets/js/bs5.help.js b/web/assets/js/bs5.help.js new file mode 100644 index 00000000..902c4282 --- /dev/null +++ b/web/assets/js/bs5.help.js @@ -0,0 +1,74 @@ +$(document).ready(function(){ + var helpWindow = $('#help_window') + var openMessage = null + function lessThanOneWeekAgo(date){ + const WEEK = 1000 * 60 * 60 * 24 * 7; + const aWeekAgo = Date.now() - WEEK; + + return date < aWeekAgo; + } + function showHelpNotice(){ + var buttonHtml = `` + $.each([ + { + icon: 'share-square-o', + color: 'default', + text: 'ShinobiShop Subscriptions', + href: 'https://licenses.shinobi.video/subscribe', + class: '' + }, + { + icon: 'paypal', + color: 'success', + text: 'Donate by PayPal', + href: 'https://www.paypal.me/ShinobiCCTV', + class: '' + }, + { + icon: 'bank', + color: 'default', + text: 'University of Zurich (UZH)', + href: 'https://www.media.uzh.ch/en/Press-Releases/2017/Generosity.html', + class: '' + }, + { + icon: 'cube', + color: 'danger', + text: lang[`Don't Show for 1 Week`], + href: '#', + class: 'hide_donate', + }, + ],function(n,button){ + buttonHtml += ` +
+
${ button.text }
+
` + }) + openMessage = new PNotify({ + title: `It's a proven fact`, + text: ` +
Generosity makes you a happier person, please consider supporting the development.
+
If you are already supporting the development, please contact us or use your provided license key and we can get this popup to go away for you Cheers!
+ ${buttonHtml}`, + hide: false, + }) + } + function dontShowForOneWeek(){ + if(openMessage){ + openMessage.remove() + } + dashboardOptions('subscription_checked',new Date()); + } + if(!userHasSubscribed && !dashboardOptions().subscription_checked || lessThanOneWeekAgo(new Date(dashboardOptions().subscription_checked))){ + setTimeout(function(){ + showHelpNotice() + },1000 * 60 * 0.2) + } + $('body').on('click','.hide_donate',function(e){ + e.preventDefault() + dontShowForOneWeek() + return false; + }) + console.log('Please support the Shinobi developement.') + console.log('https://licenses.shinobi.video/subscribe') +}) diff --git a/web/assets/js/bs5.liveGrid.js b/web/assets/js/bs5.liveGrid.js index 8bff9627..59ce2726 100644 --- a/web/assets/js/bs5.liveGrid.js +++ b/web/assets/js/bs5.liveGrid.js @@ -159,6 +159,9 @@ function buildLiveGridBlock(monitor){