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": `
$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 += `
${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){