mirror of
https://github.com/chuot/rdio-scanner.git
synced 2026-08-13 08:33:00 -06:00
Version 4.4.3 - Fix downstream not conforming to its configuration
This commit is contained in:
parent
3c48a65ef1
commit
22cde4d08b
95
client/package-lock.json
generated
95
client/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "rdio-scanner-client",
|
||||
"version": "4.4.2",
|
||||
"version": "4.4.3",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
@ -234,9 +234,9 @@
|
|||
}
|
||||
},
|
||||
"@angular/animations": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.0.9.tgz",
|
||||
"integrity": "sha512-NcQOlLQNR50qIvEjR/yo28P6Nh0hf9GRuy+4iCxHiRNZyBL8AwX/y+8/NpgSRoL/U+Iq4bXz5DSOkmrtZfFHXg==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.0.10.tgz",
|
||||
"integrity": "sha512-lIbNeLVVl9bO41orPFpKoobCvxZIZ2wdcKJBEFtQiOdw0khRQQ8k7so4TAWOZXRJR+MkOUCjU2pO8gbMXgBweQ==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
|
|
@ -293,25 +293,25 @@
|
|||
}
|
||||
},
|
||||
"@angular/common": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/common/-/common-10.0.9.tgz",
|
||||
"integrity": "sha512-zg1xtTR8LwLXfTcXX0rL30ur1GKaf3Iu8FCQpfh0804Ezn5TeovuGg2zvf/O3igwmYzrym+a0JRMe4TZsAuJxQ==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/common/-/common-10.0.10.tgz",
|
||||
"integrity": "sha512-p6/pTk0s0Ai5uUkOHHFZwp+TjxRNPldPxTU2LVxg2xuBEQTO53BsfBKn3zi74epdb1kBC0Yjdj6yEL4dITBs7A==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@angular/compiler": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.9.tgz",
|
||||
"integrity": "sha512-KUIRkOoZ0C7IlJ514ahyA1VDmlLrh9wBF/hm6e7fKMUAzPTwch6WQczjw/Bdt8ArL3ovYasbFungBvJ7apENtw==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.0.10.tgz",
|
||||
"integrity": "sha512-fO7kml0HUgnMa5eviKUk+j7NACASkoMAEgvbcVdKmGsSDu9YVkaqSdLXuj2vu9glSJWDRkZJKSrt9MzbmhyB5A==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@angular/compiler-cli": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.9.tgz",
|
||||
"integrity": "sha512-E4WxTYO4zY7ytMna5Y8Yoh58KPJKjDn3tzefLNrBEX3t69XueYmh5JTRHmNOiWcFX2QIbgqzX9mXZ9uPLDslmg==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.0.10.tgz",
|
||||
"integrity": "sha512-XkvWdJKr6HkyzAbcmy99HyDR4z949z9nHGwHNLBQjLbkX11i03fvS3bI5kgwqtNiLWYqxiPfXnpAyLBeFghCcw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"canonical-path": "1.0.0",
|
||||
|
|
@ -492,9 +492,9 @@
|
|||
}
|
||||
},
|
||||
"@angular/core": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.9.tgz",
|
||||
"integrity": "sha512-sRod8RnARYmMy/uBmZyLxt5F3vYIvAkTEv48DFvCKJ6FN7zJPS7C7/dnnDv0JG7hNsX3jVXCsIRWJiCk0ycDGg==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-10.0.10.tgz",
|
||||
"integrity": "sha512-PIQhLqjZayVXJoXs4WQu7orkePqFiux19y7bgBrsSAithe+g9BkrSIdX7+tkkX0zggUWKywY92YuMZCJ/S+uiw==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
|
|
@ -508,9 +508,9 @@
|
|||
}
|
||||
},
|
||||
"@angular/forms": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.0.9.tgz",
|
||||
"integrity": "sha512-t/ZjPFHz5LLj5osvNTkBibcF5Y1XrOwmgX8e6FPl2OTM/NcEyqUPWQmcGhy1Wc7jxP6JVWSWLrqI5QKkATHSBA==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.0.10.tgz",
|
||||
"integrity": "sha512-bWjbsqMTiCNQZzXAfiEwT/tiAzSvChnqBimrJWNSHVYRkp71TkDcKXn6mA+E//YR0eZ84GKNNiVlKFxqkmeyqQ==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
|
|
@ -524,25 +524,25 @@
|
|||
}
|
||||
},
|
||||
"@angular/platform-browser": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.9.tgz",
|
||||
"integrity": "sha512-y6d2CLj6ZM0NpJGH5yfNBTVyMiOwUXFfVRw52MWQ4Kt2Auk0EROG6dWAVL0XcE9OGXBI/U/4wemmQ9LQy7wLSA==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.0.10.tgz",
|
||||
"integrity": "sha512-srNGkvg9177skff7QOe3L+nGOSbrKLzFt3Z5O3oM0N0TWr8QlWEA+zQm8n0zLHI8AmdZbmFzAYYJiBvVCSc5RQ==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@angular/platform-browser-dynamic": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.9.tgz",
|
||||
"integrity": "sha512-iRkBAErsYNG5lPglA8bZfsKQTuVBAl6IVc0TNlGNCePQM1blZ0f2BjMoqBWrbTi5xGgGu2cmJcy9M6hob2sgzw==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.10.tgz",
|
||||
"integrity": "sha512-6jbn0Ldyc+80BCETGtE7pzfKlbjfa/wEPhLEGWoYtxrrJ5UB3CblGpDMOsv1ibOQijPZ/JSmIMmAxz66+pLx3g==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@angular/service-worker": {
|
||||
"version": "10.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.0.9.tgz",
|
||||
"integrity": "sha512-hrngIkRHhMQaJ0D61kkgstLVDjOASy8j0f+z9AHO4GlILeQlCxzHb5gqd5L6zkQ7MMs8BDSP9JBKw+Tonj4e1A==",
|
||||
"version": "10.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.0.10.tgz",
|
||||
"integrity": "sha512-YcblyEhTjfO7BEYK6UlAqTsgPcz16ftaeAraNwE+5p2igxeuyq7LGFTaQGM8nJkK0wWxNU42Nr/3VluwqyU8Xg==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
|
|
@ -1810,9 +1810,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "14.0.27",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz",
|
||||
"integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==",
|
||||
"version": "14.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz",
|
||||
"integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/q": {
|
||||
|
|
@ -2951,9 +2951,9 @@
|
|||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001114",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001114.tgz",
|
||||
"integrity": "sha512-ml/zTsfNBM+T1+mjglWRPgVsu2L76GAaADKX5f4t0pbhttEp0WMawJsHDYlFkVZkoA+89uvBRrVrEE4oqenzXQ==",
|
||||
"version": "1.0.30001116",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz",
|
||||
"integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==",
|
||||
"dev": true
|
||||
},
|
||||
"canonical-path": {
|
||||
|
|
@ -3197,6 +3197,12 @@
|
|||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
|
||||
"integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
|
||||
"dev": true
|
||||
},
|
||||
"zone.js": {
|
||||
"version": "0.10.3",
|
||||
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz",
|
||||
"integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -4302,9 +4308,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.3.533",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.533.tgz",
|
||||
"integrity": "sha512-YqAL+NXOzjBnpY+dcOKDlZybJDCOzgsq4koW3fvyty/ldTmsb4QazZpOWmVvZ2m0t5jbBf7L0lIGU3BUipwG+A==",
|
||||
"version": "1.3.538",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.538.tgz",
|
||||
"integrity": "sha512-rlyYXLlOoZkJuvY4AJXUpP7CHRVtwZz311HPVoEO1UHo/kqDCsP1pNas0A9paZuPEiYGdLwrjllF2hs69NEaTw==",
|
||||
"dev": true
|
||||
},
|
||||
"elliptic": {
|
||||
|
|
@ -7339,9 +7345,9 @@
|
|||
}
|
||||
},
|
||||
"npm-registry-fetch": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.6.tgz",
|
||||
"integrity": "sha512-SEp9m7fPe8FIKzhg2JS+xs+w4YY9mEwRlMcEZRELph7rdoygIQGY6B+g0+wdZqokHE8f57ZkexxYWqFO0FkfCw==",
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz",
|
||||
"integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"JSONStream": "^1.3.4",
|
||||
|
|
@ -12305,9 +12311,12 @@
|
|||
"dev": true
|
||||
},
|
||||
"zone.js": {
|
||||
"version": "0.10.3",
|
||||
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz",
|
||||
"integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg=="
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.0.tgz",
|
||||
"integrity": "sha512-Aeh31lIySDLetjIyTxk1X+j6jxWPHH99cLuOreApK0hNrEogxEO+cPhx5wQaeg7d7KcAFWrA6ZlIVTv7MTasyA==",
|
||||
"requires": {
|
||||
"tslib": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
{
|
||||
"author": "Chrystian Huot <chrystian.huot@saubeo.solutions>",
|
||||
"dependencies": {
|
||||
"@angular/animations": "^10.0.9",
|
||||
"@angular/animations": "^10.0.10",
|
||||
"@angular/cdk": "^10.1.3",
|
||||
"@angular/common": "~10.0.9",
|
||||
"@angular/compiler": "~10.0.9",
|
||||
"@angular/core": "~10.0.9",
|
||||
"@angular/common": "~10.0.10",
|
||||
"@angular/compiler": "~10.0.10",
|
||||
"@angular/core": "~10.0.10",
|
||||
"@angular/flex-layout": "^10.0.0-beta.32",
|
||||
"@angular/forms": "~10.0.9",
|
||||
"@angular/forms": "~10.0.10",
|
||||
"@angular/material": "^10.1.3",
|
||||
"@angular/platform-browser": "~10.0.9",
|
||||
"@angular/platform-browser-dynamic": "~10.0.9",
|
||||
"@angular/service-worker": "~10.0.9",
|
||||
"@angular/platform-browser": "~10.0.10",
|
||||
"@angular/platform-browser-dynamic": "~10.0.10",
|
||||
"@angular/service-worker": "~10.0.10",
|
||||
"rxjs": "~6.6.2",
|
||||
"tslib": "^2.0.1",
|
||||
"zone.js": "~0.10.3"
|
||||
"zone.js": "~0.11.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.1000.6",
|
||||
"@angular/cli": "^10.0.6",
|
||||
"@angular/compiler-cli": "~10.0.9",
|
||||
"@types/node": "~14.0.27",
|
||||
"@angular/compiler-cli": "~10.0.10",
|
||||
"@types/node": "~14.6.0",
|
||||
"codelyzer": "^6.0.0",
|
||||
"ts-node": "~8.10.2",
|
||||
"tslint": "~6.1.3",
|
||||
|
|
@ -33,5 +33,5 @@
|
|||
"build": "ng build --base-href ./ --prod",
|
||||
"start": "ng serve"
|
||||
},
|
||||
"version": "4.4.2"
|
||||
"version": "4.4.3"
|
||||
}
|
||||
|
|
|
|||
298
docs/config.md
298
docs/config.md
|
|
@ -10,94 +10,94 @@ This file is at the heart of [Rdio Scanner](https://github.com/chuot/rdio-scanne
|
|||
|
||||
``` js
|
||||
{
|
||||
"nodejs": {
|
||||
// (string) "development" or "production". Default is "production".
|
||||
"environment": "production",
|
||||
"nodejs": {
|
||||
// (string) "development" or "production". Default is "production".
|
||||
"environment": "production",
|
||||
|
||||
// (string) Which IP to bind to? Default is "0.0.0.0"
|
||||
"host": "0.0.0.0",
|
||||
// (string) Which IP to bind to? Default is "0.0.0.0"
|
||||
"host": "0.0.0.0",
|
||||
|
||||
// (number) Which PORT to bind to? Default is 3000
|
||||
"port": 3000,
|
||||
// (number) Which PORT to bind to? Default is 3000
|
||||
"port": 3000,
|
||||
|
||||
// (string) Path to the SSL CA certificate
|
||||
// See SSL certificates section below for more details
|
||||
"sslCA": null,
|
||||
// (string) Path to the SSL CA certificate
|
||||
// See SSL certificates section below for more details
|
||||
"sslCA": null,
|
||||
|
||||
// (string) Path to the SSL certificate
|
||||
// See SSL certificates section below for more details
|
||||
"sslCert": null,
|
||||
// (string) Path to the SSL certificate
|
||||
// See SSL certificates section below for more details
|
||||
"sslCert": null,
|
||||
|
||||
// (string) Path to the SSL privat key
|
||||
// See SSL certificates section below for more details
|
||||
"sslKey": null
|
||||
},
|
||||
// (string) Path to the SSL privat key
|
||||
// See SSL certificates section below for more details
|
||||
"sslKey": null
|
||||
},
|
||||
|
||||
"rdioScanner": {
|
||||
// (multiple types) Access control for Rdio Scanner
|
||||
// See Access control section below for more details
|
||||
"access": null,
|
||||
"rdioScanner": {
|
||||
// (multiple types) Access control for Rdio Scanner
|
||||
// See Access control section below for more details
|
||||
"access": null,
|
||||
|
||||
// (multiple types) API keys for upload scripts and downstreamers
|
||||
// Default value is a random generated UUID
|
||||
// See API keys section below for more details
|
||||
"apiKeys": "<random generated uuid>",
|
||||
// (multiple types) API keys for upload scripts and downstreamers
|
||||
// Default value is a random generated UUID
|
||||
// See API keys section below for more details
|
||||
"apiKeys": "<random generated uuid>",
|
||||
|
||||
// (object[]) Directory monitoring for ingestion of audio files
|
||||
// Default value is an empty array
|
||||
// See DirWatch section below for more details
|
||||
"dirWatch": []
|
||||
// (object[]) Directory monitoring for ingestion of audio files
|
||||
// Default value is an empty array
|
||||
// See DirWatch section below for more details
|
||||
"dirWatch": []
|
||||
|
||||
// (object[]) Downstream audio files to other Rdio Scanner instances
|
||||
// Default value is an empty array
|
||||
// See Downstreams section below for more details
|
||||
"downstreams": [],
|
||||
// (object[]) Downstream audio files to other Rdio Scanner instances
|
||||
// Default value is an empty array
|
||||
// See Downstreams section below for more details
|
||||
"downstreams": [],
|
||||
|
||||
// (object) Options definitions
|
||||
"options": {
|
||||
// (boolean) Can users download archived calls. Default value is true
|
||||
"allowDownload": true,
|
||||
// (object) Options definitions
|
||||
"options": {
|
||||
// (boolean) Can users download archived calls. Default value is true
|
||||
"allowDownload": true,
|
||||
|
||||
// (boolean) Disable the audio format conversion to m4a/aac
|
||||
// Default value is false
|
||||
"disableAudioConversion": false,
|
||||
// (boolean) Disable the audio format conversion to m4a/aac
|
||||
// Default value is false
|
||||
"disableAudioConversion": false,
|
||||
|
||||
// (number) Clear the database for audio files older than the specified number of days
|
||||
// Default value is 7
|
||||
// Specifying a value of 0 will disable this feature
|
||||
"pruneDays": 7
|
||||
// (number) Clear the database for audio files older than the specified number of days
|
||||
// Default value is 7
|
||||
// Specifying a value of 0 will disable this feature
|
||||
"pruneDays": 7
|
||||
|
||||
// (boolean) Turn off the screen backlight when it is inactive
|
||||
// Default value is true
|
||||
"useDimmer": true
|
||||
// (boolean) Turn off the screen backlight when it is inactive
|
||||
// Default value is true
|
||||
"useDimmer": true
|
||||
|
||||
// (boolean) Also toggle talkgroups based on their group assignment
|
||||
// Default value is true
|
||||
// See Systems section below for more details on groups
|
||||
"useGroup": true
|
||||
// (boolean) Also toggle talkgroups based on their group assignment
|
||||
// Default value is true
|
||||
// See Systems section below for more details on groups
|
||||
"useGroup": true
|
||||
|
||||
// (boolean) Show the activity led
|
||||
// Default value is true
|
||||
"useLed": true
|
||||
// (boolean) Show the activity led
|
||||
// Default value is true
|
||||
"useLed": true
|
||||
}
|
||||
|
||||
// (object[]) Systems definitions
|
||||
// See Systems section below for more details
|
||||
"systems": []
|
||||
},
|
||||
|
||||
// Radio Scanner uses sqlite for its default database
|
||||
// It is recommended to stick to sqlite as it works very well
|
||||
// Refer to https://sequelize.org/v5/manual/dialects.html for more details
|
||||
"sequelize": {
|
||||
"database": null,
|
||||
"dialect": "sqlite",
|
||||
"host": null,
|
||||
"password": null,
|
||||
"port": null,
|
||||
"storage": "database.sqlite",
|
||||
"username": null
|
||||
}
|
||||
|
||||
// (object[]) Systems definitions
|
||||
// See Systems section below for more details
|
||||
"systems": []
|
||||
},
|
||||
|
||||
// Radio Scanner uses sqlite for its default database
|
||||
// It is recommended to stick to sqlite as it works very well
|
||||
// Refer to https://sequelize.org/v5/manual/dialects.html for more details
|
||||
"sequelize": {
|
||||
"database": null,
|
||||
"dialect": "sqlite",
|
||||
"host": null,
|
||||
"password": null,
|
||||
"port": null,
|
||||
"storage": "database.sqlite",
|
||||
"username": null
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -162,38 +162,46 @@ access: null | string | string[] | {
|
|||
}
|
||||
```
|
||||
|
||||
Default value is `null`.
|
||||
Default value is `null` .
|
||||
|
||||
**Examples**
|
||||
|
||||
- No access control, access to all systems/talkgroups
|
||||
* No access control, access to all systems/talkgroups
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"access": null
|
||||
```
|
||||
|
||||
- Single unique password, access to all systems/talkgroups
|
||||
* Single unique password, access to all systems/talkgroups
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"access": "password"
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"access": {
|
||||
"code": "password",
|
||||
"systems": "*"
|
||||
}
|
||||
```
|
||||
|
||||
- Complex access control
|
||||
* Complex access control
|
||||
|
||||
`password1` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003.
|
||||
`password1` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003.
|
||||
|
||||
`password2` and `password3` give access to all systems/talkgroups.
|
||||
`password2` and `password3` give access to all systems/talkgroups.
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"access": [
|
||||
{
|
||||
"code": "password1",
|
||||
|
|
@ -246,32 +254,38 @@ apiKeys: null | string | string[] | {
|
|||
}
|
||||
```
|
||||
|
||||
Default value is an empty array `[]`.
|
||||
Default value is an empty array `[]` .
|
||||
|
||||
**Examples**
|
||||
|
||||
- Single API key which allows upload to any systems/talkgroups
|
||||
* Single API key which allows upload to any systems/talkgroups
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"apiKeys": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e"
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"access": {
|
||||
"key": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e",
|
||||
"systems": "*"
|
||||
}
|
||||
```
|
||||
|
||||
- Complex API keys definition
|
||||
* Complex API keys definition
|
||||
|
||||
API key `d2079382-07df-4aa9-8940-8fb9e4ef5f2e` gives access to system 11 / talkgroups 54241, 54125 and system 21 / talkgroups 60040, 60041, 50003.
|
||||
|
||||
API keys `cfcfa7d5-897c-4b96-b974-2fec80c3f775` and `a3ac707e-eaf9-4951-a9d5-c52186fa5093` give access to all systems/talkgroups.
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"apiKeys": [
|
||||
{
|
||||
"key": "d2079382-07df-4aa9-8940-8fb9e4ef5f2e",
|
||||
|
|
@ -322,35 +336,37 @@ dirWatch: {
|
|||
}[]
|
||||
```
|
||||
|
||||
- **delay** - Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a timeout value in *milliseconds* for the audio file to settle before ingesting it.
|
||||
- **deleteAfter** - You may want the audio file to be deleted after being ingested. If this value is *true*, all pre-existing audio files will be ingested and deleted as soon as [Rdio Scanner](https://github.com/chuot/rdio-scanner) starts. When this parameter is *false*, pre-existing audio files are neither ingested nor deleted.
|
||||
- **directory** - Absolute or relatives to [Rdio Scanner](https://github.com/chuot/rdio-scanner)'s. Path of the directory to be monitored. **This value must be unique**.
|
||||
- **extension** - The audio call extension to monitor without the period. Ex.: "mp3", "wav".
|
||||
- **frequency** - You may want to fake the frequency which will be displayed on *Rdio Scanner*. Let say that you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency.
|
||||
- **frequency** - You may want to simulate the frequency that will be displayed. Say you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency.
|
||||
- **mask** - Some metadata can be extracted from the file name of the audio file using specific META tags. Here is the list:
|
||||
- **#DATE** - extract the date like *20200608* or *2020-06-08*.
|
||||
- **#HZ** - extract the frequency in hertz like *119100000*.
|
||||
- **#KHZ** - extract the frequency in kilohertz like *119100*.
|
||||
- **#MHZ** - extract the frequency in megahertz like *119.100*.
|
||||
- **#TIME** - extract the *local* time like *0853439* or *08:34:39*.
|
||||
- **#SYS** - extract the system id like *11*.
|
||||
- **#TG** - extract the talkgroup id like *54241*.
|
||||
- **#UNIT** - extract the unit id like *4424001*.
|
||||
- **#ZTIME** - extract the *zulu* time like *0453439* or *04:34:39*.
|
||||
- **system** - A valid system id defined in **rdioScanner.systems**.
|
||||
- **talkgroup** - A valid talkgroup id defined in **rdioScanner.systems**.
|
||||
- **type** - In case of *Trunk Recorder*, the metadata of the *JSON file* will be used.
|
||||
* **delay** - Depending on the recorder, audio files can be ingested too soon after the recorder has created the file. You can set a timeout value in *milliseconds* for the audio file to settle before ingesting it.
|
||||
* **deleteAfter** - You may want the audio file to be deleted after being ingested. If this value is *true*, all pre-existing audio files will be ingested and deleted as soon as [Rdio Scanner](https://github.com/chuot/rdio-scanner) starts. When this parameter is *false*, pre-existing audio files are neither ingested nor deleted.
|
||||
* **directory** - Absolute or relatives to [Rdio Scanner](https://github.com/chuot/rdio-scanner)'s. Path of the directory to be monitored. **This value must be unique**.
|
||||
* **extension** - The audio call extension to monitor without the period. Ex.: "mp3", "wav".
|
||||
* **frequency** - You may want to fake the frequency which will be displayed on *Rdio Scanner*. Let say that you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency.
|
||||
* **frequency** - You may want to simulate the frequency that will be displayed. Say you are recording an AM frequency from *RTLSDR-Airband*, here you would put that frequency.
|
||||
* **mask** - Some metadata can be extracted from the file name of the audio file using specific META tags. Here is the list:
|
||||
+ **#DATE** - extract the date like *20200608* or *2020-06-08*.
|
||||
+ **#HZ** - extract the frequency in hertz like *119100000*.
|
||||
+ **#KHZ** - extract the frequency in kilohertz like *119100*.
|
||||
+ **#MHZ** - extract the frequency in megahertz like *119.100*.
|
||||
+ **#TIME** - extract the *local* time like *0853439* or *08:34:39*.
|
||||
+ **#SYS** - extract the system id like *11*.
|
||||
+ **#TG** - extract the talkgroup id like *54241*.
|
||||
+ **#UNIT** - extract the unit id like *4424001*.
|
||||
+ **#ZTIME** - extract the *zulu* time like *0453439* or *04:34:39*.
|
||||
* **system** - A valid system id defined in **rdioScanner.systems**.
|
||||
* **talkgroup** - A valid talkgroup id defined in **rdioScanner.systems**.
|
||||
* **type** - In case of *Trunk Recorder*, the metadata of the *JSON file* will be used.
|
||||
|
||||
> Note that [Rdio Scanner](https://github.com/chuot/rdio-scanner) must know the **system id** and the **talkgroup id** for the call to be ingested. These two values must be specified either by **dirWatch.system**, **dirWatch.talkgroup**, **dirWatch.mask** or a mix of them. **dirWatch.system** and **dirWatch.talkgroup** have priority over **dirWatch.mask**.
|
||||
|
||||
Default value is an empty array `[]`.
|
||||
Default value is an empty array `[]` .
|
||||
|
||||
**Examples**
|
||||
|
||||
- Ingest audio files from **Trunk Recorder**
|
||||
* Ingest audio files from **Trunk Recorder**
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"dirWatch": [
|
||||
{
|
||||
"deleteAfter": true,
|
||||
|
|
@ -369,9 +385,11 @@ Default value is an empty array `[]`.
|
|||
]
|
||||
```
|
||||
|
||||
- Ingest audio files from **RTLSDR-Airband**
|
||||
* Ingest audio files from **RTLSDR-Airband**
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"dirWatch": [
|
||||
{
|
||||
"deleteAfter": true,
|
||||
|
|
@ -385,9 +403,11 @@ Default value is an empty array `[]`.
|
|||
]
|
||||
```
|
||||
|
||||
- Ingest audio files from **SDRTrunk**
|
||||
* Ingest audio files from **SDRTrunk**
|
||||
|
||||
``` json
|
||||
|
||||
|
||||
``` json
|
||||
"dirWatch": [
|
||||
{
|
||||
"deleteAfter": true,
|
||||
|
|
@ -404,7 +424,7 @@ Ingested audio calls can be sent downstream to other [Rdio Scanner](https://gith
|
|||
|
||||
This is handy if you want to build a mesh of [Rdio Scanner](https://github.com/chuot/rdio-scanner). Let's say you want to exchange audio files with your friend who lives in another city. Or you want to ingest audio files from a Digital Logger through an internal instance and transfer these audio files to your public instance.
|
||||
|
||||
> Remember that the API key you will use must be correctly configured on the receiving host as for the system and the talkgroup.
|
||||
> Remember that the API key you will use must be correctly configured on the receiving host.
|
||||
|
||||
**Structure of the rdioScanner.downstreams object**
|
||||
|
||||
|
|
@ -414,16 +434,16 @@ downstreams: {
|
|||
disabled: boolean;
|
||||
systems: number | number[] | {
|
||||
id: number;
|
||||
talkgroups: number | number[];
|
||||
talkgroups: number | number[] | "*" | undefined;
|
||||
} | {
|
||||
id: number;
|
||||
talkgroups: number | number[];
|
||||
}[] | "*";
|
||||
}[] | "*" | undefined;
|
||||
url: string;
|
||||
}[]
|
||||
```
|
||||
|
||||
Default value is an empty array `[]`.
|
||||
Default value is an empty array `[]` .
|
||||
|
||||
**Examples**
|
||||
|
||||
|
|
@ -440,6 +460,13 @@ Default value is an empty array `[]`.
|
|||
54125
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 12
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"talkgroups": "*"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"talkgroups": [
|
||||
|
|
@ -447,7 +474,8 @@ Default value is an empty array `[]`.
|
|||
60041,
|
||||
50003
|
||||
]
|
||||
}
|
||||
},
|
||||
31
|
||||
],
|
||||
"url": "http://rdio-scanner.example.com:3000/"
|
||||
},
|
||||
|
|
@ -460,6 +488,8 @@ Default value is an empty array `[]`.
|
|||
]
|
||||
```
|
||||
|
||||
> Note in this example for API key `d2079382-07df-4aa9-8940-8fb9e4ef5f2e` that systems 12, 15 and 31 will downstream all of their talkgroups, unlike systems 11 and 21 which will only downstream some of their talkgroups.
|
||||
|
||||
## Systems - rdioScanner.systems
|
||||
|
||||
The heart of [Rdio Scanner](https://github.com/chuot/rdio-scanner) where all your systems and talkgroups are defined. Audio files to unknown systems / talkgroups will not be ingested.
|
||||
|
|
@ -487,29 +517,29 @@ systems: {
|
|||
}[]
|
||||
```
|
||||
|
||||
- **id** - System ID.
|
||||
- **label** - System label shown on the left side of second row.
|
||||
- **led** - Optional LED color for the whole system. By default the LED is *green*.
|
||||
- **talkgroups** - Talkgroups for the system.
|
||||
- **id** - Talkgroup ID.
|
||||
- **label** - Talkgroup label shown on the left side of third row.
|
||||
- **name** - Talkgroup name shown on the fouth row.
|
||||
- **patches** - Array of talkgroup ID to include in this talkgroup.
|
||||
- **tag** - Talkgroup tag shown on the right side of second row.
|
||||
- **units** - Unit aliases.
|
||||
- **id** - Unit ID.
|
||||
- **label** - Unit label shown on the right side of six sixth row.
|
||||
* **id** - System ID.
|
||||
* **label** - System label shown on the left side of second row.
|
||||
* **led** - Optional LED color for the whole system. By default the LED is *green*.
|
||||
* **talkgroups** - Talkgroups for the system.
|
||||
+ **id** - Talkgroup ID.
|
||||
+ **label** - Talkgroup label shown on the left side of third row.
|
||||
+ **name** - Talkgroup name shown on the fouth row.
|
||||
+ **patches** - Array of talkgroup ID to include in this talkgroup.
|
||||
+ **tag** - Talkgroup tag shown on the right side of second row.
|
||||
* **units** - Unit aliases.
|
||||
+ **id** - Unit ID.
|
||||
+ **label** - Unit label shown on the right side of six sixth row.
|
||||
|
||||
## Load a system from RadioReference.com
|
||||
|
||||
You may want to load your `server/config.json` with some systems from [RadioReference.com](https://radioreference.com/).
|
||||
|
||||
You can choose any `system_id` you want to refer to this system. If you choose an existing `system_id` in `config.json`, you will replace it with the new one.
|
||||
You can choose any `system_id` you want to refer to this system. If you choose an existing `system_id` in `config.json` , you will replace it with the new one.
|
||||
|
||||
See examples in the installation documents:
|
||||
|
||||
- [Install from the Docker Image](./install-docker.md)
|
||||
- [Install from the GitHub Repository](./install-github.md)
|
||||
* [Install from the Docker Image](./install-docker.md)
|
||||
* [Install from the GitHub Repository](./install-github.md)
|
||||
|
||||
> Note that [Rdio Scanner](https://github.com/chuot/rdio-scanner) has been designed to resemble old school radio scanners where each talkgroup has its own toggle button on the **SELECT TG** panel. Loading too many systems/talkgroups will make the web application very slow. Depending on your use case, you may want to have no more than 400 talkgroups.
|
||||
|
||||
|
|
|
|||
|
|
@ -11,5 +11,5 @@
|
|||
"start": "node run",
|
||||
"update": "node update"
|
||||
},
|
||||
"version": "4.4.2"
|
||||
"version": "4.4.3"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class Downstream {
|
|||
return talkgroup === call.talkgroup;
|
||||
|
||||
} else {
|
||||
return talkgroup === '*';
|
||||
return talkgroup === undefined || talkgroup === '*';
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ class Downstream {
|
|||
return system === '*';
|
||||
|
||||
} else {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
14
server/package-lock.json
generated
14
server/package-lock.json
generated
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "rdio-scanner-server",
|
||||
"version": "4.4.2",
|
||||
"version": "4.4.3",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
|
@ -4438,9 +4438,9 @@
|
|||
"optional": true
|
||||
},
|
||||
"pg": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-8.3.0.tgz",
|
||||
"integrity": "sha512-jQPKWHWxbI09s/Z9aUvoTbvGgoj98AU7FDCcQ7kdejupn/TcNpx56v2gaOTzXkzOajmOEJEdi9eTh9cA2RVAjQ==",
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-8.3.2.tgz",
|
||||
"integrity": "sha512-hOoRCTriXS+VWwyXHchRjWb9yv3Koq8irlwwXniqhdgK0AbfWvEnybGS2HIUE+UdCSTuYAM4WGPujFpPg9Vcaw==",
|
||||
"requires": {
|
||||
"buffer-writer": "2.0.0",
|
||||
"packet-reader": "1.0.0",
|
||||
|
|
@ -6081,9 +6081,9 @@
|
|||
"optional": true
|
||||
},
|
||||
"update-notifier": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz",
|
||||
"integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==",
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz",
|
||||
"integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==",
|
||||
"requires": {
|
||||
"boxen": "^4.2.0",
|
||||
"chalk": "^3.0.0",
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"multer": "^1.4.2",
|
||||
"mysql2": "^2.1.0",
|
||||
"nodemon": "^2.0.4",
|
||||
"pg": "^8.3.0",
|
||||
"pg": "^8.3.2",
|
||||
"sequelize": "^6.3.4",
|
||||
"sqlite3": "^5.0.0",
|
||||
"umzug": "^2.3.0",
|
||||
|
|
@ -39,5 +39,5 @@
|
|||
"build": "webpack",
|
||||
"start": "nodemon"
|
||||
},
|
||||
"version": "4.4.2"
|
||||
"version": "4.4.3"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue