Version 4.9.0

This commit is contained in:
Chrystian Huot 2021-01-02 07:58:18 -05:00
parent 3b0f2ac843
commit f0752640c2
48 changed files with 390 additions and 318 deletions

View file

@ -1,3 +1,11 @@
# Version 4.9
- Add basic duplicate call detection and rejection.
- Add keyboard shortcuts for the main buttons.
- Add an avoid indicator when the talkgroup is avoided.
- Add an no link indicator when websocket connection is down.
- Node modules update.
# Version 4.8 # Version 4.8
- Add downstream.system.id_as property to allow export system with a different id. - Add downstream.system.id_as property to allow export system with a different id.

View file

@ -1,6 +1,6 @@
{ {
"name": "rdio-scanner-client", "name": "rdio-scanner-client",
"version": "4.8.5", "version": "4.9.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -1609,9 +1609,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "14.14.16", "version": "14.14.19",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz",
"integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==", "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==",
"dev": true "dev": true
}, },
"@types/parse-json": { "@types/parse-json": {

View file

@ -19,7 +19,7 @@
"@angular-devkit/build-angular": "~0.1100.5", "@angular-devkit/build-angular": "~0.1100.5",
"@angular/cli": "^11.0.5", "@angular/cli": "^11.0.5",
"@angular/compiler-cli": "~11.0.5", "@angular/compiler-cli": "~11.0.5",
"@types/node": "~14.14.16", "@types/node": "~14.14.19",
"codelyzer": "^6.0.1", "codelyzer": "^6.0.1",
"ts-node": "~9.1.1", "ts-node": "~9.1.1",
"tslint": "~6.1.3", "tslint": "~6.1.3",
@ -32,5 +32,5 @@
"build": "ng build --base-href ./ --prod", "build": "ng build --base-href ./ --prod",
"start": "ng serve" "start": "ng serve"
}, },
"version": "4.8.5" "version": "4.9.0"
} }

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -2,14 +2,18 @@
<div class="led" [ngClass]="ledStyle"></div> <div class="led" [ngClass]="ledStyle"></div>
</div> </div>
<div class="rdio-display" [ngClass]="{ idle: !dimmer }" (dblclick)="toggleFullscreen.emit()"> <div class="rdio-display" [ngClass]="{ idle: !dimmer }" (dblclick)="toggleFullscreen.emit()">
<div class="row margin"> <div class="row">
<div> <div>
<span>{{ clock | date:'HH:mm' }}</span> <span>{{ clock | date:'HH:mm' }}</span>
</div> </div>
<div *ngIf="!linked">
<span>NO LINK</span>
</div>
<div> <div>
<span>Q: {{ callQueue }}</span> <span>Q: {{ callQueue }}</span>
</div> </div>
</div> </div>
<div class="row small"></div>
<div class="row"> <div class="row">
<div> <div>
<span>{{ callSystem }}</span> <span>{{ callSystem }}</span>
@ -26,7 +30,7 @@
<span>{{ callProgress | date:'HH:mm' }}</span> <span>{{ callProgress | date:'HH:mm' }}</span>
</div> </div>
</div> </div>
<div class="row bold"> <div class="row big">
<span>{{ callTalkgroupName }}</span> <span>{{ callTalkgroupName }}</span>
</div> </div>
<div class="row"> <div class="row">
@ -37,7 +41,7 @@
<span>TGID: {{ callTalkgroupId || 0 }}</span> <span>TGID: {{ callTalkgroupId || 0 }}</span>
</div> </div>
</div> </div>
<div class="row margin"> <div class="row">
<div> <div>
<span>E: {{ callError || 0 }} S: {{ callSpike || 0 }}</span> <span>E: {{ callError || 0 }} S: {{ callSpike || 0 }}</span>
</div> </div>
@ -45,6 +49,12 @@
<span *ngIf="callUnit">UID: {{ callUnit }}</span> <span *ngIf="callUnit">UID: {{ callUnit }}</span>
</div> </div>
</div> </div>
<div class="row small">
<div></div>
<div>
<span class="avoid" [ngClass]="{ avoided: avoided }">AVOID</span>
</div>
</div>
<div class="wrapper"> <div class="wrapper">
<div class="auth" [ngClass]="{ visible: auth }"> <div class="auth" [ngClass]="{ visible: auth }">
<form class="mat-elevation-z8" autocomplete="off" [formGroup]="authForm" (ngSubmit)="authenticate()"> <form class="mat-elevation-z8" autocomplete="off" [formGroup]="authForm" (ngSubmit)="authenticate()">

View file

@ -35,6 +35,22 @@
&.idle { &.idle {
background: rgb(190, 190, 174); background: rgb(190, 190, 174);
.avoid {
color: rgb(190, 190, 174);
}
}
.avoid {
background: rgba(0, 0, 0, 0.8);
border-radius: 3px;
color: rgb(209, 238, 238);
padding: 0 3px;
visibility: hidden;
}
.avoided {
visibility: visible;
} }
* { * {
@ -80,14 +96,16 @@
height: 20px; height: 20px;
justify-content: space-between; justify-content: space-between;
&.bold { &.big {
font-size: 24px; font-size: 24px;
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
} }
&.margin { &.small {
margin-bottom: 12px; font-size: 12px;
height: 14px;
line-height: 14px;
} }
} }

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -17,12 +17,20 @@
* **************************************************************************** * ****************************************************************************
*/ */
import { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; import { ChangeDetectorRef, Component, EventEmitter, HostListener, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
import { FormBuilder } from '@angular/forms'; import { FormBuilder } from '@angular/forms';
import { MatInput } from '@angular/material/input'; import { MatInput } from '@angular/material/input';
import { Subscription, timer } from 'rxjs'; import { Subscription, timer } from 'rxjs';
import { name as appName, version } from '../../../../../package.json'; import { name as appName, version } from '../../../../../package.json';
import { RdioScannerAvoidOptions, RdioScannerBeepStyle, RdioScannerCall, RdioScannerConfig, RdioScannerEvent, RdioScannerLivefeedMode } from '../rdio-scanner'; import {
RdioScannerAvoidOptions,
RdioScannerBeepStyle,
RdioScannerCall,
RdioScannerConfig,
RdioScannerEvent,
RdioScannerLivefeedMap,
RdioScannerLivefeedMode,
} from '../rdio-scanner';
import { AppRdioScannerService } from '../rdio-scanner.service'; import { AppRdioScannerService } from '../rdio-scanner.service';
const LOCAL_STORAGE_KEY = AppRdioScannerService.LOCAL_STORAGE_KEY + '-pin'; const LOCAL_STORAGE_KEY = AppRdioScannerService.LOCAL_STORAGE_KEY + '-pin';
@ -39,6 +47,8 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
auth = false; auth = false;
authForm = this.ngFormBuilder.group({ password: [] }); authForm = this.ngFormBuilder.group({ password: [] });
avoided = false;
call: RdioScannerCall | undefined; call: RdioScannerCall | undefined;
callError = '0'; callError = '0';
callFrequency: string = this.formatFrequency(0); callFrequency: string = this.formatFrequency(0);
@ -64,10 +74,14 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
ledStyle = ''; ledStyle = '';
linked = false;
livefeedOffline = true; livefeedOffline = true;
livefeedOnline = false; livefeedOnline = false;
livefeedPaused = false; livefeedPaused = false;
map: RdioScannerLivefeedMap = {};
playbackMode = false; playbackMode = false;
@Output() openSearchPanel = new EventEmitter<void>(); @Output() openSearchPanel = new EventEmitter<void>();
@ -104,16 +118,24 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
@HostListener('document:keydown.a')
avoid(options?: RdioScannerAvoidOptions): void { avoid(options?: RdioScannerAvoidOptions): void {
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
} else { } else {
if (options || this.call || this.callPrevious) { const call = this.call || this.callPrevious;
this.appRdioScannerService.beep(RdioScannerBeepStyle.Activate);
if (options || call) {
this.appRdioScannerService.avoid(options); this.appRdioScannerService.avoid(options);
if (call && !this.map[call.system][call.talkgroup]) {
this.appRdioScannerService.beep(RdioScannerBeepStyle.Activate);
} else {
this.appRdioScannerService.beep(RdioScannerBeepStyle.Deactivate);
}
} else { } else {
this.appRdioScannerService.beep(RdioScannerBeepStyle.Denied); this.appRdioScannerService.beep(RdioScannerBeepStyle.Denied);
} }
@ -122,6 +144,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
@HostListener('document:keydown.s')
holdSystem(): void { holdSystem(): void {
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
@ -140,6 +163,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
@HostListener('document:keydown.t')
holdTalkgroup(): void { holdTalkgroup(): void {
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
@ -158,6 +182,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
@HostListener('document:keydown.l')
livefeed(): void { livefeed(): void {
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
@ -181,7 +206,11 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
this.syncClock(); this.syncClock();
} }
pause(): void { @HostListener('document:keydown.space', ['$event'])
@HostListener('document:keydown.p')
pause(event?: KeyboardEvent): void {
event?.preventDefault();
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
@ -199,6 +228,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
@HostListener('document:keydown.r')
replay(): void { replay(): void {
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
@ -247,6 +277,7 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
@HostListener('document:keydown.n')
skip(options?: { delay?: boolean }): void { skip(options?: { delay?: boolean }): void {
if (this.auth) { if (this.auth) {
this.authFocus(); this.authFocus();
@ -334,6 +365,10 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
this.holdTg = event.holdTg || false; this.holdTg = event.holdTg || false;
} }
if ('linked' in event) {
this.linked = event.linked || false;
}
if ('livefeedMode' in event && event.livefeedMode) { if ('livefeedMode' in event && event.livefeedMode) {
this.livefeedOffline = event.livefeedMode === RdioScannerLivefeedMode.Offline; this.livefeedOffline = event.livefeedMode === RdioScannerLivefeedMode.Offline;
@ -342,6 +377,10 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
this.playbackMode = event.livefeedMode === RdioScannerLivefeedMode.Playback; this.playbackMode = event.livefeedMode === RdioScannerLivefeedMode.Playback;
} }
if ('map' in event) {
this.map = event.map || {};
}
if ('pause' in event) { if ('pause' in event) {
this.livefeedPaused = event.pause || false; this.livefeedPaused = event.pause || false;
} }
@ -456,6 +495,15 @@ export class AppRdioScannerMainComponent implements OnDestroy, OnInit {
} }
} }
const call = this.call || this.callPrevious;
if (call && this.map[call.system]) {
this.avoided = !this.map[call.system][call.talkgroup];
} else {
this.avoided = false;
}
const colors = ['blue', 'cyan', 'green', 'magenta', 'red', 'white', 'yellow']; const colors = ['blue', 'cyan', 'green', 'magenta', 'red', 'white', 'yellow'];
this.ledStyle = this.call && this.livefeedPaused ? 'on paused' : this.call ? 'on' : 'off'; this.ledStyle = this.call && this.livefeedPaused ? 'on paused' : this.call ? 'on' : 'off';

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -58,7 +58,6 @@ export class AppRdioScannerComponent implements OnDestroy {
this.appRdioScannerService.stopLivefeed(); this.appRdioScannerService.stopLivefeed();
this.searchPanel?.close(); this.searchPanel?.close();
this.selectPanel?.close(); this.selectPanel?.close();
} }
@ -66,7 +65,11 @@ export class AppRdioScannerComponent implements OnDestroy {
this.eventSubscription.unsubscribe(); this.eventSubscription.unsubscribe();
} }
toggleFullscreen(): void { @HostListener('document:keydown.f')
@HostListener('document:keydown.tab', ['$event'])
toggleFullscreen(event?: KeyboardEvent): void {
event?.preventDefault();
if (document.fullscreenElement) { if (document.fullscreenElement) {
const el: { const el: {
exitFullscreen?: () => void; exitFullscreen?: () => void;
@ -111,4 +114,28 @@ export class AppRdioScannerComponent implements OnDestroy {
this.livefeedMode = event.livefeedMode; this.livefeedMode = event.livefeedMode;
} }
} }
@HostListener('document:keydown.arrowleft', ['$event'])
private keyLeftArrow(event?: KeyboardEvent): void {
event?.preventDefault();
if (this.selectPanel?.opened) {
this.selectPanel?.close();
} else {
this.searchPanel?.open();
}
}
@HostListener('document:keydown.arrowright', ['$event'])
private keyRightArrow(event?: KeyboardEvent): void {
event?.preventDefault();
if (this.searchPanel?.opened) {
this.searchPanel?.close();
} else {
this.selectPanel?.open();
}
}
} }

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -152,7 +152,9 @@ export class AppRdioScannerService implements OnDestroy {
} }
} }
this.cleanQueue(); if (this.livefeedMode !== RdioScannerLivefeedMode.Playback) {
this.cleanQueue();
}
this.rebuildGroups(); this.rebuildGroups();
@ -731,14 +733,18 @@ export class AppRdioScannerService implements OnDestroy {
this.websocket = new WebSocket(websocketUrl); this.websocket = new WebSocket(websocketUrl);
this.websocket.onclose = (ev: CloseEvent) => { this.websocket.onclose = (ev: CloseEvent) => {
this.event.emit({ linked: false });
if (ev.code !== 1000) { if (ev.code !== 1000) {
timer(2000).subscribe(() => this.reconnectWebsocket()); timer(2000).subscribe(() => this.reconnectWebsocket());
} }
}; };
this.websocket.onerror = () => { }; this.websocket.onerror = () => this.event.emit({ linked: false });
this.websocket.onopen = () => { this.websocket.onopen = () => {
this.event.emit({ linked: true });
if (this.websocket instanceof WebSocket) { if (this.websocket instanceof WebSocket) {
this.websocket.onmessage = (ev: MessageEvent) => this.parseWebsocketMessage(ev.data); this.websocket.onmessage = (ev: MessageEvent) => this.parseWebsocketMessage(ev.data);
} }

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -85,6 +85,7 @@ export interface RdioScannerEvent {
groups?: RdioScannerGroup[]; groups?: RdioScannerGroup[];
holdSys?: boolean; holdSys?: boolean;
holdTg?: boolean; holdTg?: boolean;
linked?: boolean;
livefeedMode?: RdioScannerLivefeedMode; livefeedMode?: RdioScannerLivefeedMode;
map?: RdioScannerLivefeedMap; map?: RdioScannerLivefeedMap;
pause?: boolean; pause?: boolean;

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -2,7 +2,7 @@
## ##
## ############################################################################# ## #############################################################################
## Copyright (C) 2019-2020 Chrystian Huot ## Copyright (C) 2019-2021 Chrystian Huot
## ##
## This program is free software: you can redistribute it and/or modify ## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by ## it under the terms of the GNU General Public License as published by

View file

@ -36,23 +36,23 @@ The color is _green_ by default, but can be customized in `config.json` by the s
- **UID: 4612205** - the unit ID or alias name - **UID: 4612205** - the unit ID or alias name
- History - The last five played audio files - History - The last five played audio files
> Note that you can double-click or double-tap the display area to switch to full-screen display (also on mobile devices). > Note that you can double-click, double-tap the display area, press the `f key` or the `tab key` to switch to full-screen display (also on mobile devices).
### Control area ### Control area
![Control Area](./images/rdio_scanner_control.png?raw=true "Control Area") ![Control Area](./images/rdio_scanner_control.png?raw=true "Control Area")
| Button | Description | | Button | Keyboard | Description |
| ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![LIVE FEED](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED") | When active, incoming audio will be played according to the active systems/talkgroups on the **SELECT TG** panel. The LED can also be _yellow_ if playing audio from the archive while **LIVE FEED** is inactive, this is called **offline playback mode**. Disabling **LIVE FEED** will also stop any playing audio and will clear the listening queue. | | ![LIVE FEED](./images/rdio_scanner_control_livefeed_offline.png?raw=true "LIVE FEED") | l | When active, incoming audio will be played according to the active systems/talkgroups on the **SELECT TG** panel. The LED can also be _yellow_ if playing audio from the archive while **LIVE FEED** is inactive, this is called **offline playback mode**. Disabling **LIVE FEED** will also stop any playing audio and will clear the listening queue. |
| ![HOLD SYS](./images/rdio_scanner_control_holdsys.png?raw=true "HOLD SYS") | Temporarily maintain the current system in live feed mode. | | ![HOLD SYS](./images/rdio_scanner_control_holdsys.png?raw=true "HOLD SYS") | s | Temporarily maintain the current system in live feed mode. |
| ![HOLD TG](./images/rdio_scanner_control_holdtg.png?raw=true "HOLD TG") | Temporarily maintain the current talkgroup in live feed mode. | | ![HOLD TG](./images/rdio_scanner_control_holdtg.png?raw=true "HOLD TG") | t | Temporarily maintain the current talkgroup in live feed mode. |
| ![REPLAY LAST](./images/rdio_scanner_control_replay.png?raw=true "REPLAY LAST") | Replay the current audio from the beginning or the previous one if there is none active. | | ![REPLAY LAST](./images/rdio_scanner_control_replay.png?raw=true "REPLAY LAST") | r | Replay the current audio from the beginning or the previous one if there is none active. |
| ![SKIP NEXT](./images/rdio_scanner_control_skip.png?raw=true "SKIP NEXT") | Stop the audio currently playing and play the next one in the listening queue. This is useful when playing boring or encrypted sound. | | ![SKIP NEXT](./images/rdio_scanner_control_skip.png?raw=true "SKIP NEXT") | n | Stop the audio currently playing and play the next one in the listening queue. This is useful when playing boring or encrypted sound. |
| ![AVOID](./images/rdio_scanner_control_avoid.png?raw=true "AVOID") | Activate and deactivate the talkgroup from the current or previous audio. | | ![AVOID](./images/rdio_scanner_control_avoid.png?raw=true "AVOID") | a | Activate and deactivate the talkgroup from the current or previous audio. |
| ![SEARCH CALL](./images/rdio_scanner_control_search.png?raw=true "SEARCH CALL") | Display the archived audio panel. | | ![SEARCH CALL](./images/rdio_scanner_control_search.png?raw=true "SEARCH CALL") | &larr; | Display the archived audio panel. |
| ![PAUSE](./images/rdio_scanner_control_pause.png?raw=true "PAUSE") | Stop playing queue audio. Useful if you have to answer the phone without losing what's queued up for playing. | | ![PAUSE](./images/rdio_scanner_control_pause.png?raw=true "PAUSE") | p, space | Stop playing queue audio. Useful if you have to answer the phone without losing what's queued up for playing. |
| ![SELECT TG](./images/rdio_scanner_control_select.png?raw=true "SELECT TG") | Display the systems/talkgroups selection panel where you decide which audio you want to listen to in \*_LIVE FEED_ (not in offline playback mode). | | ![SELECT TG](./images/rdio_scanner_control_select.png?raw=true "SELECT TG") | &rarr; | Display the systems/talkgroups selection panel where you decide which audio you want to listen to in \*_LIVE FEED_ (not in offline playback mode). |
### Systems/Talkgroups selection panel ### Systems/Talkgroups selection panel

View file

@ -10,5 +10,5 @@
"start": "node run", "start": "node run",
"update": "node update" "update": "node update"
}, },
"version": "4.8.5" "version": "4.9.0"
} }

2
run.js
View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -492,6 +492,29 @@ class Controller extends EventEmitter {
return; return;
} }
const dateFrom = new Date(call.dateTime);
const dateTo = new Date(call.dateTime);
dateFrom.setMilliseconds(dateFrom.getMilliseconds() - 500);
dateTo.setMilliseconds(dateTo.getMilliseconds() + 500);
const duplicateCall = await this.models.call.findOne({
where: {
dateTime: {
[Op.gte]: dateFrom,
[Op.lte]: dateTo,
},
system: call.system,
talkgroup: call.talkgroup,
},
});
if (duplicateCall) {
console.log(`NewCall: system=${call.system} talkgroup=${call.talkgroup} file=${call.audioName} Duplicate call rejected`);
return;
}
if (!this.config.disableAudioConversion && call.audioType !== 'audio/aac') { if (!this.config.disableAudioConversion && call.audioType !== 'audio/aac') {
try { try {
call = await this.convertCallAudio(call); call = await this.convertCallAudio(call);

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

407
server/package-lock.json generated
View file

@ -1,6 +1,6 @@
{ {
"name": "rdio-scanner-server", "name": "rdio-scanner-server",
"version": "4.8.5", "version": "4.9.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -67,6 +67,12 @@
} }
} }
}, },
"@discoveryjs/json-ext": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
"integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
"dev": true
},
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "0.2.2", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz",
@ -339,18 +345,18 @@
} }
}, },
"@webpack-cli/info": { "@webpack-cli/info": {
"version": "1.1.0", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.1.tgz",
"integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", "integrity": "sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"envinfo": "^7.7.3" "envinfo": "^7.7.3"
} }
}, },
"@webpack-cli/serve": { "@webpack-cli/serve": {
"version": "1.1.0", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.1.tgz",
"integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", "integrity": "sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==",
"dev": true "dev": true
}, },
"@xtuc/ieee754": { "@xtuc/ieee754": {
@ -518,12 +524,6 @@
"sprintf-js": "~1.0.2" "sprintf-js": "~1.0.2"
} }
}, },
"array-back": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz",
"integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==",
"dev": true
},
"array-flatten": { "array-flatten": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@ -727,9 +727,9 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001170", "version": "1.0.30001171",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001171.tgz",
"integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==", "integrity": "sha512-5Alrh8TTYPG9IH4UkRqEBZoEToWRLvPbSQokvzSz0lii8/FOWKG4keO1HoYfPWs8IF/NH/dyNPg1cmJGvV3Zlg==",
"dev": true "dev": true
}, },
"caseless": { "caseless": {
@ -841,55 +841,6 @@
"delayed-stream": "~1.0.0" "delayed-stream": "~1.0.0"
} }
}, },
"command-line-usage": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz",
"integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==",
"dev": true,
"requires": {
"array-back": "^4.0.1",
"chalk": "^2.4.2",
"table-layout": "^1.0.1",
"typical": "^5.2.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
}
}
},
"commander": { "commander": {
"version": "2.20.3", "version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@ -1222,9 +1173,9 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "7.16.0", "version": "7.17.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz",
"integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
@ -1454,30 +1405,27 @@
"dev": true "dev": true
}, },
"execa": { "execa": {
"version": "4.1.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
"integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"cross-spawn": "^7.0.0", "cross-spawn": "^7.0.3",
"get-stream": "^5.0.0", "get-stream": "^6.0.0",
"human-signals": "^1.1.1", "human-signals": "^2.1.0",
"is-stream": "^2.0.0", "is-stream": "^2.0.0",
"merge-stream": "^2.0.0", "merge-stream": "^2.0.0",
"npm-run-path": "^4.0.0", "npm-run-path": "^4.0.1",
"onetime": "^5.1.0", "onetime": "^5.1.2",
"signal-exit": "^3.0.2", "signal-exit": "^3.0.3",
"strip-final-newline": "^2.0.0" "strip-final-newline": "^2.0.0"
}, },
"dependencies": { "dependencies": {
"get-stream": { "get-stream": {
"version": "5.2.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
"dev": true, "dev": true
"requires": {
"pump": "^3.0.0"
}
} }
} }
}, },
@ -1546,6 +1494,12 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true "dev": true
}, },
"fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
"dev": true
},
"file-entry-cache": { "file-entry-cache": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
@ -1578,12 +1532,12 @@
} }
}, },
"find-up": { "find-up": {
"version": "4.1.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true, "dev": true,
"requires": { "requires": {
"locate-path": "^5.0.0", "locate-path": "^6.0.0",
"path-exists": "^4.0.0" "path-exists": "^4.0.0"
} }
}, },
@ -1864,9 +1818,9 @@
"integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw=="
}, },
"helmet": { "helmet": {
"version": "4.2.0", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/helmet/-/helmet-4.2.0.tgz", "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.3.1.tgz",
"integrity": "sha512-aoiSxXMd0ks1ojYpSCFoCRzgv4rY/uB9jKStaw8PkXwsdLYa/Gq+Nc5l0soH0cwBIsLAlujPnx4HLQs+LaXCrQ==" "integrity": "sha512-WsafDyKsIexB0+pUNkq3rL1rB5GVAghR68TP8ssM9DPEMzfBiluEQlVzJ/FEj6Vq2Ag3CNuxf7aYMjXrN0X49Q=="
}, },
"http-cache-semantics": { "http-cache-semantics": {
"version": "4.1.0", "version": "4.1.0",
@ -1897,9 +1851,9 @@
} }
}, },
"human-signals": { "human-signals": {
"version": "1.1.1", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true "dev": true
}, },
"iconv-lite": { "iconv-lite": {
@ -1952,6 +1906,54 @@
"requires": { "requires": {
"pkg-dir": "^4.2.0", "pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0" "resolve-cwd": "^3.0.0"
},
"dependencies": {
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
"p-locate": "^4.1.0"
}
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
"p-limit": "^2.2.0"
}
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"requires": {
"find-up": "^4.0.0"
}
}
} }
}, },
"imurmurhash": { "imurmurhash": {
@ -2011,9 +2013,9 @@
} }
}, },
"is-core-module": { "is-core-module": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"has": "^1.0.3" "has": "^1.0.3"
@ -2215,12 +2217,6 @@
"package-json": "^6.3.0" "package-json": "^6.3.0"
} }
}, },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true
},
"levn": { "levn": {
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -2238,12 +2234,12 @@
"dev": true "dev": true
}, },
"locate-path": { "locate-path": {
"version": "5.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true, "dev": true,
"requires": { "requires": {
"p-locate": "^4.1.0" "p-locate": "^5.0.0"
} }
}, },
"lodash": { "lodash": {
@ -2355,16 +2351,16 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
}, },
"mime-db": { "mime-db": {
"version": "1.44.0", "version": "1.45.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
"integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w=="
}, },
"mime-types": { "mime-types": {
"version": "2.1.27", "version": "2.1.28",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
"requires": { "requires": {
"mime-db": "1.44.0" "mime-db": "1.45.0"
} }
}, },
"mimic-fn": { "mimic-fn": {
@ -2803,21 +2799,21 @@
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
}, },
"p-limit": { "p-limit": {
"version": "2.3.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"p-try": "^2.0.0" "yocto-queue": "^0.1.0"
} }
}, },
"p-locate": { "p-locate": {
"version": "4.1.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true, "dev": true,
"requires": { "requires": {
"p-limit": "^2.2.0" "p-limit": "^3.0.2"
} }
}, },
"p-try": { "p-try": {
@ -2957,12 +2953,12 @@
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
}, },
"pkg-dir": { "pkg-dir": {
"version": "4.2.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
"dev": true, "dev": true,
"requires": { "requires": {
"find-up": "^4.0.0" "find-up": "^5.0.0"
} }
}, },
"please-upgrade-node": { "please-upgrade-node": {
@ -3134,12 +3130,6 @@
"resolve": "^1.9.0" "resolve": "^1.9.0"
} }
}, },
"reduce-flatten": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz",
"integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
"dev": true
},
"regexpp": { "regexpp": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
@ -3215,6 +3205,12 @@
} }
} }
}, },
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
"resolve": { "resolve": {
"version": "1.19.0", "version": "1.19.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
@ -3654,27 +3650,35 @@
} }
}, },
"table": { "table": {
"version": "6.0.4", "version": "6.0.6",
"resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", "resolved": "https://registry.npmjs.org/table/-/table-6.0.6.tgz",
"integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", "integrity": "sha512-OInCtPmDNieVBkVFi6C8RwU2S2H0h8mF3e3TQK4nreaUNCpooQUkI+A/KuEkm5FawfhWIfNqG+qfelVVR+V00g==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^7.0.2",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"slice-ansi": "^4.0.0", "slice-ansi": "^4.0.0",
"string-width": "^4.2.0" "string-width": "^4.2.0"
} },
}, "dependencies": {
"table-layout": { "ajv": {
"version": "1.0.1", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz",
"integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"array-back": "^4.0.1", "fast-deep-equal": "^3.1.1",
"deep-extend": "~0.6.0", "json-schema-traverse": "^1.0.0",
"typical": "^5.2.0", "require-from-string": "^2.0.2",
"wordwrapjs": "^4.0.0" "uri-js": "^4.2.2"
}
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
}
} }
}, },
"tapable": { "tapable": {
@ -3730,17 +3734,6 @@
"serialize-javascript": "^5.0.1", "serialize-javascript": "^5.0.1",
"source-map": "^0.6.1", "source-map": "^0.6.1",
"terser": "^5.3.8" "terser": "^5.3.8"
},
"dependencies": {
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
"yocto-queue": "^0.1.0"
}
}
} }
}, },
"text-table": { "text-table": {
@ -3847,12 +3840,6 @@
"is-typedarray": "^1.0.0" "is-typedarray": "^1.0.0"
} }
}, },
"typical": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
"integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==",
"dev": true
},
"umzug": { "umzug": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
@ -3971,9 +3958,9 @@
} }
}, },
"webpack": { "webpack": {
"version": "5.11.0", "version": "5.11.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.0.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.1.tgz",
"integrity": "sha512-ubWv7iP54RqAC/VjixgpnLLogCFbAfSOREcSWnnOlZEU8GICC5eKmJSu6YEnph2N2amKqY9rvxSwgyHxVqpaRw==", "integrity": "sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/eslint-scope": "^3.7.0", "@types/eslint-scope": "^3.7.0",
@ -4007,80 +3994,34 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz",
"integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==",
"dev": true "dev": true
},
"find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"requires": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
}
},
"locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"requires": {
"p-locate": "^5.0.0"
}
},
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
"yocto-queue": "^0.1.0"
}
},
"p-locate": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"requires": {
"p-limit": "^3.0.2"
}
},
"pkg-dir": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
"integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
"dev": true,
"requires": {
"find-up": "^5.0.0"
}
} }
} }
}, },
"webpack-cli": { "webpack-cli": {
"version": "4.2.0", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.1.tgz",
"integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", "integrity": "sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@webpack-cli/info": "^1.1.0", "@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/serve": "^1.1.0", "@webpack-cli/info": "^1.2.1",
"@webpack-cli/serve": "^1.2.1",
"colorette": "^1.2.1", "colorette": "^1.2.1",
"command-line-usage": "^6.1.0",
"commander": "^6.2.0", "commander": "^6.2.0",
"enquirer": "^2.3.6", "enquirer": "^2.3.6",
"execa": "^4.1.0", "execa": "^5.0.0",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2", "import-local": "^3.0.2",
"interpret": "^2.2.0", "interpret": "^2.2.0",
"leven": "^3.1.0",
"rechoir": "^0.7.0", "rechoir": "^0.7.0",
"v8-compile-cache": "^2.2.0", "v8-compile-cache": "^2.2.0",
"webpack-merge": "^4.2.2" "webpack-merge": "^4.2.2"
}, },
"dependencies": { "dependencies": {
"commander": { "commander": {
"version": "6.2.0", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
"integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
"dev": true "dev": true
} }
} }
@ -4173,16 +4114,6 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true "dev": true
}, },
"wordwrapjs": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz",
"integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==",
"dev": true,
"requires": {
"reduce-flatten": "^2.0.0",
"typical": "^5.0.0"
}
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@ -4200,9 +4131,9 @@
} }
}, },
"ws": { "ws": {
"version": "7.4.1", "version": "7.4.2",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz",
"integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA=="
}, },
"xdg-basedir": { "xdg-basedir": {
"version": "4.0.0", "version": "4.0.0",

View file

@ -6,9 +6,9 @@
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"express": "^4.17.1", "express": "^4.17.1",
"form-data": "^3.0.0", "form-data": "^3.0.0",
"helmet": "^4.2.0", "helmet": "^4.3.1",
"mariadb": "^2.5.2", "mariadb": "^2.5.2",
"mime-types": "^2.1.27", "mime-types": "^2.1.28",
"multer": "^1.4.2", "multer": "^1.4.2",
"mysql2": "^2.2.5", "mysql2": "^2.2.5",
"nodemon": "^2.0.6", "nodemon": "^2.0.6",
@ -17,12 +17,12 @@
"sqlite3": "^5.0.0", "sqlite3": "^5.0.0",
"umzug": "^2.3.0", "umzug": "^2.3.0",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"ws": "^7.4.1" "ws": "^7.4.2"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^7.16.0", "eslint": "^7.17.0",
"webpack": "^5.11.0", "webpack": "^5.11.1",
"webpack-cli": "^4.2.0", "webpack-cli": "^4.3.1",
"webpack-node-externals": "^2.5.2" "webpack-node-externals": "^2.5.2"
}, },
"license": "LICENSE", "license": "LICENSE",
@ -39,5 +39,5 @@
"build": "webpack", "build": "webpack",
"start": "nodemon" "start": "nodemon"
}, },
"version": "4.8.5" "version": "4.9.0"
} }

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by

View file

@ -1,6 +1,6 @@
/* /*
* ***************************************************************************** * *****************************************************************************
* Copyright (C) 2019-2020 Chrystian Huot * Copyright (C) 2019-2021 Chrystian Huot
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by