Happy new year: new version 2.5

This commit is contained in:
Chrystian Huot 2020-01-08 10:59:15 -05:00
parent 15afca79a1
commit 193d346d8c
15 changed files with 467 additions and 316 deletions

View file

@ -1,14 +1,16 @@
# Rdio Scanner v2.1
# Rdio Scanner v2.5
*Rdio Scanner* is a progressive web interface designed to resemble an old school radio scanner. It integrates all frontend / backend components to manage audio files from different sources.
For now, only [Trunk Recorder](https://github.com/robotastic/trunk-recorder) software files can be used, but other audio sources can be added later on request.
Need help?
[![Chat](https://img.shields.io/gitter/room/rdio-scanner/Lobby.svg)](https://gitter.im/rdio-scanner/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
## What's new in this version
Version 2.1 focuses on various speed improvements for searching stored calls.
Version 2.5 add a new feature where you can toggle talkgroups according to their defined group (emergency, fire, law, transport, ...).
Version 2.0 is a major rewrite in which Meteor has been replaced by [The Apollo Data Graph Platform](https://www.apollographql.com/) for its API. MongoDB is also replaced by [SQLite](https://www.sqlite.org/) to facilitate the entire installation process. It is still possible to use another database by changing [Sequelize ORM](https://sequelize.org/) settings accordingly.
@ -67,7 +69,7 @@ Note that if you change the talkgroups selection while holding a system or a tal
### Talkgroups selection screen
The talkgroups selection screen is where you select the talkgroups. You can either select them individually, by system or globally.
The talkgroups selection screen is where you select the talkgroups. You can either select them individually, by system, by group or globally.
Enabled talkgroup calls will be queued for listening.

View file

@ -1,6 +1,6 @@
{
"name": "rdio-scanner-client",
"version": "2.1.0",
"version": "2.5.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -1056,9 +1056,9 @@
}
},
"@angular/flex-layout": {
"version": "8.0.0-beta.26",
"resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-8.0.0-beta.26.tgz",
"integrity": "sha512-lXDLlMSNQhidW0grvisIsj/3gqLuYyN2MvABuRYybnFTc233sXGZuOAaulqq663LA0/DP/GNcz6a+A4ZAAlmPA==",
"version": "8.0.0-beta.27",
"resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-8.0.0-beta.27.tgz",
"integrity": "sha512-qmpvQPesU4ZQ56IscwgmVRpK2UnyV+gwvXUql7TMv0QV215hLcHczjGsrKkLfW2By5E7XEyDat9br72uVXcPMw==",
"requires": {
"tslib": "^1.7.1"
}
@ -2025,9 +2025,9 @@
"dev": true
},
"@types/node": {
"version": "12.12.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.21.tgz",
"integrity": "sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA=="
"version": "13.1.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz",
"integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA=="
},
"@types/source-list-map": {
"version": "0.1.2",
@ -8235,9 +8235,9 @@
}
},
"rxjs": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
"integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
"integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
"requires": {
"tslib": "^1.9.0"
}

View file

@ -1,6 +1,6 @@
{
"name": "rdio-scanner-client",
"version": "2.1.0",
"version": "2.5.0",
"private": true,
"scripts": {
"build": "ng build --cross-origin use-credentials --prod $*",
@ -14,7 +14,7 @@
"@angular/common": "~8.2.14",
"@angular/compiler": "~8.2.14",
"@angular/core": "~8.2.14",
"@angular/flex-layout": "^8.0.0-beta.26",
"@angular/flex-layout": "^8.0.0-beta.27",
"@angular/forms": "~8.2.14",
"@angular/material": "^8.2.3",
"@angular/platform-browser": "~8.2.14",
@ -28,7 +28,7 @@
"apollo-link-ws": "^1.0.19",
"graphql": "^14.5.8",
"graphql-tag": "^2.10.1",
"rxjs": "~6.5.3",
"rxjs": "~6.5.4",
"subscriptions-transport-ws": "^0.9.16",
"tslib": "^1.10.0",
"zone.js": "~0.10.2"
@ -38,7 +38,7 @@
"@angular/cli": "~8.3.21",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@types/node": "~12.12.21",
"@types/node": "~13.1.4",
"codelyzer": "^5.2.1",
"ts-node": "~8.5.4",
"tslint": "~5.20.1",

View file

@ -149,21 +149,27 @@
<button (click)="toggleSelectPanel(false)" mat-icon-button>
<mat-icon>arrow_back</mat-icon>
</button>
<ng-container *ngIf="systems.length > 1">
</mat-toolbar>
<fieldset>
<div fxLayout="row wrap" fxLayoutAlign="space-between">
<button *ngFor="let group of groups" class="rdio-button" (click)="toggleGroup(group.name)"
[ngClass]="group.status">
{{ group.name }}
</button>
<button class="rdio-button-mini all-off" (click)="avoid({ all: false })">
OFF
</button>
<button class="rdio-button-mini all-on" (click)="avoid({ all: true })">
ON
</button>
</ng-container>
</mat-toolbar>
</div>
</fieldset>
<fieldset *ngFor="let system of systems">
<legend>
{{ system.name }}
</legend>
<div fxLayout="row wrap" fxLayoutAlign="space-between">
<button *ngFor="let talkgroup of system.talkgroups" class="rdio-button on"
<button *ngFor="let talkgroup of system.talkgroups" class="rdio-button"
(click)="avoid({ system: system, talkgroup: talkgroup })"
[ngClass]="{ off: !(selection[system.system] && selection[system.system][talkgroup.dec]), on: selection[system.system] && selection[system.system][talkgroup.dec] }">
{{ talkgroup.alphaTag }}

View file

@ -59,10 +59,13 @@
&:active {
top: 4px;
transform: scale(.98);
transform-origin: bottom center;
}
&.off::after,
&.on::after {
&.on::after,
&.partial::after {
content: '';
border-radius: 4px;
display: block;
@ -82,6 +85,11 @@
background: rgb(100, 230, 50);
box-shadow: 1px 1px 1px rgb(255, 255, 255) inset, 0 0 3px 2px rgb(100, 230, 50);
}
&.partial::after {
background: rgb(230, 165, 50);
box-shadow: 1px 1px 1px rgb(255, 255, 255) inset, 0 0 3px 2px rgb(230, 165, 50);
}
}
.rdio-button {
@ -200,6 +208,12 @@
}
}
.rdio-main,
.rdio-search,
.rdio-select {
min-width: 370px;
}
.rdio-main {
box-sizing: border-box;
margin: auto;
@ -208,7 +222,6 @@
justify-content: center;
max-width: 640px;
min-height: 100%;
min-width: 270px;
padding: 24px;
}
@ -311,4 +324,24 @@
}
}
}
@media (min-width: 720px) {
.rdio-button {
width: calc(20% - 8px);
}
.rdio-button-mini {
width: calc(10% - 8px);
}
}
@media (min-width: 1200px) {
.rdio-button {
width: calc(10% - 8px);
}
.rdio-button-mini {
width: calc(5% - 8px);
}
}
}

View file

@ -12,6 +12,17 @@ declare var webkitAudioContext: any;
const LOCAL_STORAGE_KEY = 'rdio-scanner';
enum RdioScannerGroupStatus {
Off = 'off',
On = 'on',
Partial = 'partial',
}
interface RdioScannerGroup {
name: string;
status: RdioScannerGroupStatus;
}
interface RdioScannerSelection {
[key: string]: {
[key: string]: boolean;
@ -40,6 +51,7 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
get displayTag() { return this._displayTag; }
get displayTalkgroup() { return this._displayTalkgroup; }
get displayUnit() { return this._displayUnit; }
get groups() { return this._groups; }
get livefeedPaused() { return this._livefeedPaused; }
get livefeedStatus() { return !!this.livefeedSubscription; }
get searchForm() { return this._searchForm; }
@ -71,6 +83,7 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
private _displayTag = 'Tag';
private _displayTalkgroup = 0;
private _displayUnit = 0;
private _groups: RdioScannerGroup[] = [];
private _livefeedPaused = false;
private _searchForm: FormGroup = this.ngFormBuilder.group({
date: [null],
@ -162,6 +175,8 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
}
}
this.buildGroups();
if (this.call && !(this.selection && this.selection[this.call.system] &&
this._selection[this.call.system][this.call.talkgroup])) {
this.skip();
@ -422,6 +437,38 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
}
}
toggleGroup(name: string): void {
const group = this.groups.find((_group) => _group.name === name);
if (group) {
const status = group.status === RdioScannerGroupStatus.On ? false : true;
this.systems.forEach((system) => {
system.talkgroups.forEach((talkgroup) => {
if (talkgroup.group === name) {
this.selection[system.system][talkgroup.dec] = status;
}
});
});
this.buildGroups();
if (this.call && !(this.selection && this.selection[this.call.system] &&
this._selection[this.call.system][this.call.talkgroup])) {
this.skip();
}
if (this.livefeedStatus) {
this.unsubscribeLivefeed();
this.subscribeLivefeed();
}
this.writeSelection();
this.cleanQueue();
}
}
toggleSearchPanel(opened = !this.searchPanelOpened): void {
if (opened) {
this.loadStoredCalls();
@ -460,9 +507,42 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
events.forEach((event) => document.body.addEventListener(event, bootstrap));
}
private cleanQueue(): void {
const queueLength = this.callQueue.length;
private buildGroups(): void {
const groups: RdioScannerGroup[] = [];
this.systems.forEach((system: RdioScannerSystem) => {
system.talkgroups
.forEach((talkgroup: RdioScannerTalkgroup) => {
const group = groups.find((_group) => _group.name === talkgroup.group);
if (!group) {
const allOn = this.systems.every((sys) => {
return sys.talkgroups.filter((tg) => tg.group === talkgroup.group)
.every((tg) => this.selection[sys.system][tg.dec]);
});
const allOff = this.systems.every((sys) => {
return sys.talkgroups.filter((tg) => tg.group === talkgroup.group)
.every((tg) => !this.selection[sys.system][tg.dec]);
});
const name = talkgroup.group;
const status = allOn ? RdioScannerGroupStatus.On
: allOff ? RdioScannerGroupStatus.Off
: RdioScannerGroupStatus.Partial;
groups.push({ name, status });
}
});
});
groups.sort((a, b) => a.name.localeCompare(b.name));
this.groups.splice(0, this.groups.length, ...groups);
}
private cleanQueue(): void {
this._callQueue = this.callQueue.filter((call: RdioScannerCall) => {
return this.selection && this.selection[call.system] && this.selection[call.system][call.talkgroup];
});
@ -476,53 +556,6 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
.concat(' Hz');
}
private processCall(call: RdioScannerCall): void {
if (call !== null && typeof call === 'object') {
call = this.transformCall(call);
this.queue(call);
}
}
private processSystems(systems: RdioScannerSystem[]): void {
if (Array.isArray(systems)) {
this.systems.splice(0, this.systems.length, ...systems);
this.readSelection();
this.rebuildSelection();
this.writeSelection();
}
}
private readSelection(): any {
if (window instanceof Window && window.localStorage instanceof Storage) {
try {
this._selection = JSON.parse(window.localStorage.getItem(LOCAL_STORAGE_KEY));
} catch (err) {
this._selection = {};
}
}
}
private rebuildSelection(): void {
this._selection = this.systems.reduce((sa, sv) => {
const tgs = sv.talkgroups.map((tg) => tg.dec.toString());
if (Array.isArray(sa[sv.system])) {
Object.keys(sa[sv.system]).forEach((tg) => {
if (!tgs.includes(tg)) {
delete sa[sv.system][tg];
}
});
}
sa[sv.system] = sv.talkgroups.reduce((ta, tv) => {
ta[tv.dec] = typeof ta[tv.dec] === 'boolean' ? ta[tv.dec] : true;
return ta;
}, sa[sv.system] || {});
return sa;
}, this.selection || {});
}
private async loadStoredCalls(filters?: any): Promise<void> {
const limit = this.searchResultsBuffer.length;
@ -602,6 +635,55 @@ export class AppRdioScannerComponent implements OnDestroy, OnInit {
}
}
private processCall(call: RdioScannerCall): void {
if (call !== null && typeof call === 'object') {
call = this.transformCall(call);
this.queue(call);
}
}
private processSystems(systems: RdioScannerSystem[]): void {
if (Array.isArray(systems)) {
this.systems.splice(0, this.systems.length, ...systems);
this.readSelection();
this.rebuildSelection();
this.writeSelection();
this.buildGroups();
}
}
private readSelection(): any {
if (window instanceof Window && window.localStorage instanceof Storage) {
try {
this._selection = JSON.parse(window.localStorage.getItem(LOCAL_STORAGE_KEY));
} catch (err) {
this._selection = {};
}
}
}
private rebuildSelection(): void {
this._selection = this.systems.reduce((sa, sv) => {
const tgs = sv.talkgroups.map((tg) => tg.dec.toString());
if (Array.isArray(sa[sv.system])) {
Object.keys(sa[sv.system]).forEach((tg) => {
if (!tgs.includes(tg)) {
delete sa[sv.system][tg];
}
});
}
sa[sv.system] = sv.talkgroups.reduce((ta, tv) => {
ta[tv.dec] = typeof ta[tv.dec] === 'boolean' ? ta[tv.dec] : true;
return ta;
}, sa[sv.system] || {});
return sa;
}, this.selection || {});
}
private subscribeSearchForm(): void {
let lastValue = this.searchForm.value;

View file

@ -1,3 +1,3 @@
1001,3e9,D,BLAINVILLE *1,HQ Blainville Main,Utilities,Utilities,1
1002,3ea,D,BLAINVILLE *2,HQ Blainville Travail,Utilities,1
1003,3eb,D,BLAINVILLE *3,HQ Blainville Autre,Utilities,2
1001,3e9,D,BLAINVILLE *1,HQ Blainville Main,Utilities,UTILITY,1
1002,3ea,D,BLAINVILLE *2,HQ Blainville Travail,Utilities,UTILITY,1
1003,3eb,D,BLAINVILLE *3,HQ Blainville Autre,Utilities,UTILITY,1

1 1001,3e9,D,BLAINVILLE *1,HQ Blainville Main,Utilities,Utilities,1 1001 3e9 D BLAINVILLE *1 HQ Blainville Main Utilities UTILITY 1
2 1002,3ea,D,BLAINVILLE *2,HQ Blainville Travail,Utilities,1 1002 3ea D BLAINVILLE *2 HQ Blainville Travail Utilities UTILITY 1
3 1003,3eb,D,BLAINVILLE *3,HQ Blainville Autre,Utilities,2 1003 3eb D BLAINVILLE *3 HQ Blainville Autre Utilities UTILITY 1

View file

@ -1,37 +1,37 @@
54241,d3e1,D,ALPHA 1,MRC TDB Fire Alpha 1,Fire Dispatch,Fire,1
54242,d3e2,D,BRAVO 1,MRC TDB Fire Bravo 1,Fire Talk,Fire,1
54243,d3e3,D,BRAVO 2,MRC TDB Fire Bravo 2,Fire Talk,Fire,1
54248,d3e8,D,BRAVO 3,MRC TDB Fire Bravo 3,Fire Talk,Fire,1
54251,d3eb,D,BRAVO 4,MRC TDB Fire Bravo 4,Fire Talk,Fire,1
54261,d3f5,D,BRAVO 5,MRC TDB Fire Bravo 5,Fire Talk,Fire,1
54244,d3e4,D,BRAVO 6,MRC TDB Fire Bravo 6,Fire Talk,Fire,1
54129,d371,D,BRAVO 7,MRC TDB Fire Bravo 7,Fire Talk,Fire,1
54125,d36d,D,BRAVO 8,MRC TDB Fire Bravo 8,Fire Talk,Fire,1
54005,d2f5,D,D-M FD,Deux-Montagnes Fire Dispatch,Fire Dispatch,Fire,1
54239,d3df,D,SADP FD,Ste-Anne-des-Plaines Fire Dispatch,Fire Dispatch,Fire,1
54200,d3b8,D,ST ANN,St-Eustache General Announcement,Fire Talk,Fire,2
54201,d3b9,D,SE GEN,St-Eustache General,Fire Talk,Fire,2
54202,d3ba,D,SE OP1,St-Eustache Operations,Fire Talk,Fire,2
54203,d3bb,D,SE PRV,St-Eustache Prevention,Fire Tac,Fire,2
54206,d3be,D,SE CCU,St-Eustache Mesure d'Urgence,Interop,Fire,2
56201,db89,D,DSURGEN,YUL Security Dispatch,Security,Security,2
56202,db8a,D,DSURTAC,YUL Security Tactical,Security,Security,2
56203,db8b,D,DSUROP,YUL Security Operations,Security,Security,2
56211,db93,D,DINCOPS,YUL Fire Dispatch,Fire Dispatch,Fire,1
56212,db94,D,DINCTAC,YUL Tactical,Fire Tac,Fire,1
56218,db9a,D,DCCU,YUL CCU,Utilities,Utility,3
56221,db9d,D,DBATIM,YUL Batiment,Utilities,Utility,3
56222,db9e,D,DSCHAMP,YUL SCHAMP,Utilities,Utility,3
56223,db9f,D,DFOULE,YUL Foule,Utilities,Utility,3
56224,dba0,D,DACCES,YUL Acces,Utilities,Utility,3
56225,dba1,D,DELECTR,YUL Electricity,Utilities,Utility,3
56226,dba2,D,DPISTE,YUL Piste,Utilities,Utility,3
56227,dba3,D,DTABLIER,YUL Tablier,Utilities,Utility,3
56228,dba4,D,DVTP,YUL VTP,Utilities,Utility,3
56229,dba5,D,DPONT,YUL Pont,Utilities,Utility,3
56232,dba8,D,DINSTALL,YUL Install,Utilities,Utility,3
56204,db8c,D,MSURGEN,YMX Security Dispatch,Security,Security,3
56213,db95,D,MINCOPS,YMX Fire Dispatch,Fire Dispatch,Fire,1
56214,db96,D,MINCTAC,YMX Fire Tactical,Fire Tac,Fire,1
56219,db9b,D,MCCU,YMX CCU,Utilities,Utility,3
56231,dba7,D,MPISTE,YMX PISTE,Utilities,Utility,3
54241,d3e1,D,ALPHA 1,MRC TDB Fire Alpha 1,Fire Dispatch,FIRE,1
54242,d3e2,D,BRAVO 1,MRC TDB Fire Bravo 1,Fire Talk,FIRE,1
54243,d3e3,D,BRAVO 2,MRC TDB Fire Bravo 2,Fire Talk,FIRE,1
54248,d3e8,D,BRAVO 3,MRC TDB Fire Bravo 3,Fire Talk,FIRE,1
54251,d3eb,D,BRAVO 4,MRC TDB Fire Bravo 4,Fire Talk,FIRE,1
54261,d3f5,D,BRAVO 5,MRC TDB Fire Bravo 5,Fire Talk,FIRE,1
54244,d3e4,D,BRAVO 6,MRC TDB Fire Bravo 6,Fire Talk,FIRE,1
54129,d371,D,BRAVO 7,MRC TDB Fire Bravo 7,Fire Talk,FIRE,1
54125,d36d,D,BRAVO 8,MRC TDB Fire Bravo 8,Fire Talk,FIRE,1
54005,d2f5,D,D-M FD,Deux-Montagnes Fire Dispatch,Fire Dispatch,FIRE,1
54239,d3df,D,SADP FD,Ste-Anne-des-Plaines Fire Dispatch,Fire Dispatch,FIRE,1
54200,d3b8,D,ST ANN,St-Eustache General Announcement,Fire Talk,FIRE,2
54201,d3b9,D,SE GEN,St-Eustache General,Fire Talk,FIRE,2
54202,d3ba,D,SE OP1,St-Eustache Operations,Fire Talk,FIRE,2
54203,d3bb,D,SE PRV,St-Eustache Prevention,Fire Tac,FIRE,2
54206,d3be,D,SE CCU,St-Eustache Mesure d'urgence,Interop,EMERGENCY,2
56201,db89,D,DSURGEN,YUL Security Dispatch,Security,SECURITY,2
56202,db8a,D,DSURTAC,YUL Security Tactical,Security,SECURITY,2
56203,db8b,D,DSUROP,YUL Security Operations,Security,SECURITY,2
56211,db93,D,DINCOPS,YUL Fire Dispatch,Fire Dispatch,FIRE,1
56212,db94,D,DINCTAC,YUL Tactical,Fire Tac,FIRE,1
56218,db9a,D,DCCU,YUL CCU,Mesure d'urgence,EMERGENCY,3
56221,db9d,D,DBATIM,YUL Batiment,Utilities,UTILITY,3
56222,db9e,D,DSCHAMP,YUL SCHAMP,Utilities,UTILITY,3
56223,db9f,D,DFOULE,YUL Foule,Utilities,UTILITY,3
56224,dba0,D,DACCES,YUL Acces,Utilities,UTILITY,3
56225,dba1,D,DELECTR,YUL Electricity,Utilities,UTILITY,3
56226,dba2,D,DPISTE,YUL Piste,Utilities,UTILITY,3
56227,dba3,D,DTABLIER,YUL Tablier,Utilities,UTILITY,3
56228,dba4,D,DVTP,YUL VTP,Utilities,UTILITY,3
56229,dba5,D,DPONT,YUL Pont,Utilities,UTILITY,3
56232,dba8,D,DINSTALL,YUL Install,Utilities,UTILITY,3
56204,db8c,D,MSURGEN,YMX Security Dispatch,Security,SECURITY,3
56213,db95,D,MINCOPS,YMX Fire Dispatch,Fire Dispatch,FIRE,1
56214,db96,D,MINCTAC,YMX Fire Tactical,Fire Tac,FIRE,1
56219,db9b,D,MCCU,YMX CCU,Mesure d'urgence,EMERGENCY,3
56231,dba7,D,MPISTE,YMX PISTE,Utilities,UTILITY,3

1 54241 d3e1 D ALPHA 1 MRC TDB Fire Alpha 1 Fire Dispatch Fire FIRE 1
2 54242 d3e2 D BRAVO 1 MRC TDB Fire Bravo 1 Fire Talk Fire FIRE 1
3 54243 d3e3 D BRAVO 2 MRC TDB Fire Bravo 2 Fire Talk Fire FIRE 1
4 54248 d3e8 D BRAVO 3 MRC TDB Fire Bravo 3 Fire Talk Fire FIRE 1
5 54251 d3eb D BRAVO 4 MRC TDB Fire Bravo 4 Fire Talk Fire FIRE 1
6 54261 d3f5 D BRAVO 5 MRC TDB Fire Bravo 5 Fire Talk Fire FIRE 1
7 54244 d3e4 D BRAVO 6 MRC TDB Fire Bravo 6 Fire Talk Fire FIRE 1
8 54129 d371 D BRAVO 7 MRC TDB Fire Bravo 7 Fire Talk Fire FIRE 1
9 54125 d36d D BRAVO 8 MRC TDB Fire Bravo 8 Fire Talk Fire FIRE 1
10 54005 d2f5 D D-M FD Deux-Montagnes Fire Dispatch Fire Dispatch Fire FIRE 1
11 54239 d3df D SADP FD Ste-Anne-des-Plaines Fire Dispatch Fire Dispatch Fire FIRE 1
12 54200 d3b8 D ST ANN St-Eustache General Announcement Fire Talk Fire FIRE 2
13 54201 d3b9 D SE GEN St-Eustache General Fire Talk Fire FIRE 2
14 54202 d3ba D SE OP1 St-Eustache Operations Fire Talk Fire FIRE 2
15 54203 d3bb D SE PRV St-Eustache Prevention Fire Tac Fire FIRE 2
16 54206 d3be D SE CCU St-Eustache Mesure d'Urgence St-Eustache Mesure d'urgence Interop Fire EMERGENCY 2
17 56201 db89 D DSURGEN YUL Security Dispatch Security Security SECURITY 2
18 56202 db8a D DSURTAC YUL Security Tactical Security Security SECURITY 2
19 56203 db8b D DSUROP YUL Security Operations Security Security SECURITY 2
20 56211 db93 D DINCOPS YUL Fire Dispatch Fire Dispatch Fire FIRE 1
21 56212 db94 D DINCTAC YUL Tactical Fire Tac Fire FIRE 1
22 56218 db9a D DCCU YUL CCU Utilities Mesure d'urgence Utility EMERGENCY 3
23 56221 db9d D DBATIM YUL Batiment Utilities Utility UTILITY 3
24 56222 db9e D DSCHAMP YUL SCHAMP Utilities Utility UTILITY 3
25 56223 db9f D DFOULE YUL Foule Utilities Utility UTILITY 3
26 56224 dba0 D DACCES YUL Acces Utilities Utility UTILITY 3
27 56225 dba1 D DELECTR YUL Electricity Utilities Utility UTILITY 3
28 56226 dba2 D DPISTE YUL Piste Utilities Utility UTILITY 3
29 56227 dba3 D DTABLIER YUL Tablier Utilities Utility UTILITY 3
30 56228 dba4 D DVTP YUL VTP Utilities Utility UTILITY 3
31 56229 dba5 D DPONT YUL Pont Utilities Utility UTILITY 3
32 56232 dba8 D DINSTALL YUL Install Utilities Utility UTILITY 3
33 56204 db8c D MSURGEN YMX Security Dispatch Security Security SECURITY 3
34 56213 db95 D MINCOPS YMX Fire Dispatch Fire Dispatch Fire FIRE 1
35 56214 db96 D MINCTAC YMX Fire Tactical Fire Tac Fire FIRE 1
36 56219 db9b D MCCU YMX CCU Utilities Mesure d'urgence Utility EMERGENCY 3
37 56231 dba7 D MPISTE YMX PISTE Utilities Utility UTILITY 3

View file

@ -1,9 +1,9 @@
54153,d389,D,ASSOMP FD,L'Assomption Fire Dispatch,Fire Dispatch,Fire,1
54171,d39b,D,MASCOU FD,Mascouche Fire Dispatch,Fire Dispatch,Fire,1
54141,d37d,D,REPENT FD1,Repentigny Fire Dispatch 1,Fire Dispatch,Fire,1
54142,d37e,D,REPENT FD2,Repentigny Fire Dispatch 2,Fire Talk,Fire,1
54143,d37f,D,REPENT FO,Repentigny Fire Operations,Fire Talk,Fire,1
54144,d380,D,REPENT FP,Repentigny Fire Prevention,Fire Talk,Fire,1
54145,d381,D,REPENT EM,Repentigny Emergency Measure,Fire Talk,Fire,1
54231,d3d7,D,TERREB FD,Terrebonne Fire Dispatch,Fire Dispatch,Fire,1
54232,d3d8,D,TERREB FO,Terrebonne Fire Operations,Fire Tac,Fire,1
54153,d389,D,ASSOMP FD,L'Assomption Fire Dispatch,Fire Dispatch,FIRE,1
54171,d39b,D,MASCOU FD,Mascouche Fire Dispatch,Fire Dispatch,FIRE,1
54141,d37d,D,REPENT FD1,Repentigny Fire Dispatch 1,Fire Dispatch,FIRE,1
54142,d37e,D,REPENT FD2,Repentigny Fire Dispatch 2,Fire Talk,FIRE,1
54143,d37f,D,REPENT FO,Repentigny Fire Operations,Fire Talk,FIRE,1
54144,d380,D,REPENT FP,Repentigny Fire Prevention,Fire Talk,FIRE,1
54145,d381,D,REPENT EM,Repentigny Emergency Measure,Fire Talk,FIRE,1
54231,d3d7,D,TERREB FD,Terrebonne Fire Dispatch,Fire Dispatch,FIRE,1
54232,d3d8,D,TERREB FO,Terrebonne Fire Operations,Fire Tac,FIRE,1

1 54153 d389 D ASSOMP FD L'Assomption Fire Dispatch Fire Dispatch Fire FIRE 1
2 54171 d39b D MASCOU FD Mascouche Fire Dispatch Fire Dispatch Fire FIRE 1
3 54141 d37d D REPENT FD1 Repentigny Fire Dispatch 1 Fire Dispatch Fire FIRE 1
4 54142 d37e D REPENT FD2 Repentigny Fire Dispatch 2 Fire Talk Fire FIRE 1
5 54143 d37f D REPENT FO Repentigny Fire Operations Fire Talk Fire FIRE 1
6 54144 d380 D REPENT FP Repentigny Fire Prevention Fire Talk Fire FIRE 1
7 54145 d381 D REPENT EM Repentigny Emergency Measure Fire Talk Fire FIRE 1
8 54231 d3d7 D TERREB FD Terrebonne Fire Dispatch Fire Dispatch Fire FIRE 1
9 54232 d3d8 D TERREB FO Terrebonne Fire Operations Fire Tac Fire FIRE 1

View file

@ -1,47 +1,47 @@
60040,ea88,D,GENERALE,SERAM Appel generale,Fire Dispatch,Fire,1
60041,ea89,D,A1 REPART,Repartition,Fire Dispatch,Fire,1
50001,c351,D,SG 1,SERAM Regroupement 1,Fire Dispatch,Fire,1
50002,c352,D,SG 2,SERAM Regroupement 2,Fire Dispatch,Fire,1
50003,c353,D,SG 3,SERAM Regroupement 3,Fire Dispatch,Fire,1
50004,c354,D,SG 4,SERAM Regroupement 4,Fire Dispatch,Fire,1
50005,c355,D,SG 5,SERAM Regroupement 5,Fire Dispatch,Fire,1
50006,c356,D,SG 6,SERAM Regroupement 6,Fire Dispatch,Fire,1
50007,c357,D,SG 7,SERAM Regroupement 7,Fire Dispatch,Fire,1
50008,c358,D,SG 8,SERAM Regroupement 8,Fire Dispatch,Fire,1
60051,ea93,D,CMD 3,SERAM Commandement 3,Fire Dispatch,Fire,1
60052,ea94,D,CMD 4,SERAM Commandement 4,Fire Dispatch,Fire,1
60053,ea95,D,CMD 5,SERAM Commandement 5,Fire Dispatch,Fire,1
60054,ea96,D,CMD 6,SERAM Commandement 6,Fire Dispatch,Fire,1
60055,ea97,D,CMD 7,SERAM Commandement 7,Fire Dispatch,Fire,1
60056,ea98,D,CMD 8,SERAM Commandement 8,Fire Dispatch,Fire,1
60059,ea9b,D,CMD 11,SERAM Commandement 11,Fire Dispatch,Fire,1
60091,eabb,D,CMD 12,SERAM Commandement 12,Fire Dispatch,Fire,1
60092,eabc,D,CMD 13,SERAM Commandement 13,Fire Dispatch,Fire,1
60057,ea99,D,CMD 14,SERAM Commandement 14,Fire Dispatch,Fire,1
60061,ea9d,D,OPS 3,SERAM Operations 3,Fire Tac,Fire,1
60062,ea9e,D,OPS 4,SERAM Operations 4,Fire Tac,Fire,1
60063,ea9f,D,OPS 5,SERAM Operations 5,Fire Tac,Fire,1
60064,eaa0,D,OPS 6,SERAM Operations 6,Fire Tac,Fire,1
60065,eaa1,D,OPS 7,SERAM Operations 7,Fire Tac,Fire,1
60066,eaa2,D,OPS 8,SERAM Operations 8,Fire Tac,Fire,1
60069,eaa2,D,OPS 11,SERAM Operations 11,Fire Tac,Fire,1
60093,eabd,D,OPS 12,SERAM Operations 12,Fire Tac,Fire,1
60094,eabe,D,OPS 13,SERAM Operations 13,Fire Tac,Fire,1
60067,eaa3,D,OPS 14,SERAM Operations 14,Fire Tac,Fire,1
60042,ea8a,D,PR A,SERAM First Responders A,Fire Dispatch,Fire,1
60043,ea8b,D,PR B,SERAM First Responders B,Fire Dispatch,Fire,1
60058,ea9a,D,PCM A,SERAM Commandement A,Fire Tac,Fire,1
60068,eaa4,D,PCM B,SERAM Commandement B,Fire Tac,Fire,1
60080,eab0,D,PCM C,SERAM Commandement C,Fire Tac,Fire,1
60081,eab1,D,935 A,SERAM 935 A,Fire Tac,Fire,1
60082,eab2,D,935 B,SERAM 935 B,Fire Tac,Fire,1
60079,eaaf,D,935 C,SERAM 935 C,Fire Tac,Fire,1
60149,eaf5,D,EMERGENCY,SERAM Emergency,Fire-Tac,Fire,1
60071,eaa7,D,SC 1,SERAM Civil Security 1,Emergency Ops,Emergency,1
60072,eaa8,D,SC 2,SERAM Civil Security 2,Emergency Ops,Emergency,1
60101,eac5,D,FORM 1,SERAM Training 1,Fire-Talk,Fire,2
60102,eac6,D,FORM 2,SERAM Training 2,Fire-Talk,Fire,2
60111,eacf,D,LIAISON,SERAM Liaison,Fire-Talk,Fire,2
60112,ead0,D,LOGISTIC,SERAM Logistic,Fire-Talk,Fire,2
60114,ead4,D,PREV RCI,SERAM Prevention RCI,Fire-Talk,Fire,2
60294,eb86,D,DSRC MEDIA,SERAM Media,Info,Info,2
60040,ea88,D,GENERALE,SERAM Appel generale,Fire Dispatch,FIRE,1
60041,ea89,D,A1 REPART,Repartition,Fire Dispatch,FIRE,1
50001,c351,D,SG 1,SERAM Regroupement 1,Fire Dispatch,FIRE,1
50002,c352,D,SG 2,SERAM Regroupement 2,Fire Dispatch,FIRE,1
50003,c353,D,SG 3,SERAM Regroupement 3,Fire Dispatch,FIRE,1
50004,c354,D,SG 4,SERAM Regroupement 4,Fire Dispatch,FIRE,1
50005,c355,D,SG 5,SERAM Regroupement 5,Fire Dispatch,FIRE,1
50006,c356,D,SG 6,SERAM Regroupement 6,Fire Dispatch,FIRE,1
50007,c357,D,SG 7,SERAM Regroupement 7,Fire Dispatch,FIRE,1
50008,c358,D,SG 8,SERAM Regroupement 8,Fire Dispatch,FIRE,1
60051,ea93,D,CMD 3,SERAM Commandement 3,Fire Dispatch,FIRE,1
60052,ea94,D,CMD 4,SERAM Commandement 4,Fire Dispatch,FIRE,1
60053,ea95,D,CMD 5,SERAM Commandement 5,Fire Dispatch,FIRE,1
60054,ea96,D,CMD 6,SERAM Commandement 6,Fire Dispatch,FIRE,1
60055,ea97,D,CMD 7,SERAM Commandement 7,Fire Dispatch,FIRE,1
60056,ea98,D,CMD 8,SERAM Commandement 8,Fire Dispatch,FIRE,1
60059,ea9b,D,CMD 11,SERAM Commandement 11,Fire Dispatch,FIRE,1
60091,eabb,D,CMD 12,SERAM Commandement 12,Fire Dispatch,FIRE,1
60092,eabc,D,CMD 13,SERAM Commandement 13,Fire Dispatch,FIRE,1
60057,ea99,D,CMD 14,SERAM Commandement 14,Fire Dispatch,FIRE,1
60061,ea9d,D,OPS 3,SERAM Operations 3,Fire Tac,FIRE,1
60062,ea9e,D,OPS 4,SERAM Operations 4,Fire Tac,FIRE,1
60063,ea9f,D,OPS 5,SERAM Operations 5,Fire Tac,FIRE,1
60064,eaa0,D,OPS 6,SERAM Operations 6,Fire Tac,FIRE,1
60065,eaa1,D,OPS 7,SERAM Operations 7,Fire Tac,FIRE,1
60066,eaa2,D,OPS 8,SERAM Operations 8,Fire Tac,FIRE,1
60069,eaa2,D,OPS 11,SERAM Operations 11,Fire Tac,FIRE,1
60093,eabd,D,OPS 12,SERAM Operations 12,Fire Tac,FIRE,1
60094,eabe,D,OPS 13,SERAM Operations 13,Fire Tac,FIRE,1
60067,eaa3,D,OPS 14,SERAM Operations 14,Fire Tac,FIRE,1
60042,ea8a,D,PR A,SERAM First Responders A,Fire Dispatch,FIRE,1
60043,ea8b,D,PR B,SERAM First Responders B,Fire Dispatch,FIRE,1
60058,ea9a,D,PCM A,SERAM Commandement A,Fire Tac,FIRE,1
60068,eaa4,D,PCM B,SERAM Commandement B,Fire Tac,FIRE,1
60080,eab0,D,PCM C,SERAM Commandement C,Fire Tac,FIRE,1
60081,eab1,D,935 A,SERAM 935 A,Fire Tac,FIRE,1
60082,eab2,D,935 B,SERAM 935 B,Fire Tac,FIRE,1
60079,eaaf,D,935 C,SERAM 935 C,Fire Tac,FIRE,1
60149,eaf5,D,EMERGENCY,SERAM Emergency,Fire-Tac,EMERGENCY,1
60071,eaa7,D,SC 1,SERAM Civil Security 1,Emergency Ops,EMERGENCY,1
60072,eaa8,D,SC 2,SERAM Civil Security 2,Emergency Ops,EMERGENCY,1
60101,eac5,D,FORM 1,SERAM Training 1,Fire-Talk,FIRE,2
60102,eac6,D,FORM 2,SERAM Training 2,Fire-Talk,FIRE,2
60111,eacf,D,LIAISON,SERAM Liaison,Fire-Talk,FIRE,2
60112,ead0,D,LOGISTIC,SERAM Logistic,Fire-Talk,FIRE,2
60114,ead4,D,PREV RCI,SERAM Prevention RCI,Fire-Talk,FIRE,2
60294,eb86,D,DSRC MEDIA,SERAM Media,Info,INFO,2

1 60040 ea88 D GENERALE SERAM Appel generale Fire Dispatch Fire FIRE 1
2 60041 ea89 D A1 REPART Repartition Fire Dispatch Fire FIRE 1
3 50001 c351 D SG 1 SERAM Regroupement 1 Fire Dispatch Fire FIRE 1
4 50002 c352 D SG 2 SERAM Regroupement 2 Fire Dispatch Fire FIRE 1
5 50003 c353 D SG 3 SERAM Regroupement 3 Fire Dispatch Fire FIRE 1
6 50004 c354 D SG 4 SERAM Regroupement 4 Fire Dispatch Fire FIRE 1
7 50005 c355 D SG 5 SERAM Regroupement 5 Fire Dispatch Fire FIRE 1
8 50006 c356 D SG 6 SERAM Regroupement 6 Fire Dispatch Fire FIRE 1
9 50007 c357 D SG 7 SERAM Regroupement 7 Fire Dispatch Fire FIRE 1
10 50008 c358 D SG 8 SERAM Regroupement 8 Fire Dispatch Fire FIRE 1
11 60051 ea93 D CMD 3 SERAM Commandement 3 Fire Dispatch Fire FIRE 1
12 60052 ea94 D CMD 4 SERAM Commandement 4 Fire Dispatch Fire FIRE 1
13 60053 ea95 D CMD 5 SERAM Commandement 5 Fire Dispatch Fire FIRE 1
14 60054 ea96 D CMD 6 SERAM Commandement 6 Fire Dispatch Fire FIRE 1
15 60055 ea97 D CMD 7 SERAM Commandement 7 Fire Dispatch Fire FIRE 1
16 60056 ea98 D CMD 8 SERAM Commandement 8 Fire Dispatch Fire FIRE 1
17 60059 ea9b D CMD 11 SERAM Commandement 11 Fire Dispatch Fire FIRE 1
18 60091 eabb D CMD 12 SERAM Commandement 12 Fire Dispatch Fire FIRE 1
19 60092 eabc D CMD 13 SERAM Commandement 13 Fire Dispatch Fire FIRE 1
20 60057 ea99 D CMD 14 SERAM Commandement 14 Fire Dispatch Fire FIRE 1
21 60061 ea9d D OPS 3 SERAM Operations 3 Fire Tac Fire FIRE 1
22 60062 ea9e D OPS 4 SERAM Operations 4 Fire Tac Fire FIRE 1
23 60063 ea9f D OPS 5 SERAM Operations 5 Fire Tac Fire FIRE 1
24 60064 eaa0 D OPS 6 SERAM Operations 6 Fire Tac Fire FIRE 1
25 60065 eaa1 D OPS 7 SERAM Operations 7 Fire Tac Fire FIRE 1
26 60066 eaa2 D OPS 8 SERAM Operations 8 Fire Tac Fire FIRE 1
27 60069 eaa2 D OPS 11 SERAM Operations 11 Fire Tac Fire FIRE 1
28 60093 eabd D OPS 12 SERAM Operations 12 Fire Tac Fire FIRE 1
29 60094 eabe D OPS 13 SERAM Operations 13 Fire Tac Fire FIRE 1
30 60067 eaa3 D OPS 14 SERAM Operations 14 Fire Tac Fire FIRE 1
31 60042 ea8a D PR A SERAM First Responders A Fire Dispatch Fire FIRE 1
32 60043 ea8b D PR B SERAM First Responders B Fire Dispatch Fire FIRE 1
33 60058 ea9a D PCM A SERAM Commandement A Fire Tac Fire FIRE 1
34 60068 eaa4 D PCM B SERAM Commandement B Fire Tac Fire FIRE 1
35 60080 eab0 D PCM C SERAM Commandement C Fire Tac Fire FIRE 1
36 60081 eab1 D 935 A SERAM 935 A Fire Tac Fire FIRE 1
37 60082 eab2 D 935 B SERAM 935 B Fire Tac Fire FIRE 1
38 60079 eaaf D 935 C SERAM 935 C Fire Tac Fire FIRE 1
39 60149 eaf5 D EMERGENCY SERAM Emergency Fire-Tac Fire EMERGENCY 1
40 60071 eaa7 D SC 1 SERAM Civil Security 1 Emergency Ops Emergency EMERGENCY 1
41 60072 eaa8 D SC 2 SERAM Civil Security 2 Emergency Ops Emergency EMERGENCY 1
42 60101 eac5 D FORM 1 SERAM Training 1 Fire-Talk Fire FIRE 2
43 60102 eac6 D FORM 2 SERAM Training 2 Fire-Talk Fire FIRE 2
44 60111 eacf D LIAISON SERAM Liaison Fire-Talk Fire FIRE 2
45 60112 ead0 D LOGISTIC SERAM Logistic Fire-Talk Fire FIRE 2
46 60114 ead4 D PREV RCI SERAM Prevention RCI Fire-Talk Fire FIRE 2
47 60294 eb86 D DSRC MEDIA SERAM Media Info Info INFO 2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 205 KiB

View file

@ -1,6 +1,6 @@
{
"name": "rdio-scanner",
"version": "2.1.0",
"version": "2.5.0",
"private": true,
"main": "run.js",
"scripts": {

283
server/package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "rdio-scanner-server",
"version": "2.1.0",
"version": "2.5.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -25,9 +25,9 @@
},
"dependencies": {
"@types/node": {
"version": "10.17.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.11.tgz",
"integrity": "sha512-dNd2pp8qTzzNLAs3O8nH3iU9DG9866KHq9L3ISPB7DOGERZN81nW/5/g/KzMJpCU8jrbCiMRBzV9/sCEdRosig=="
"version": "10.17.13",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz",
"integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg=="
}
}
},
@ -211,9 +211,9 @@
"integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ=="
},
"@types/keygrip": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.1.tgz",
"integrity": "sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg="
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz",
"integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw=="
},
"@types/koa": {
"version": "2.11.0",
@ -368,35 +368,36 @@
}
},
"apollo-cache-control": {
"version": "0.8.9",
"resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.9.tgz",
"integrity": "sha512-EFRAEL13QkMbXhl0NSABVS0wfiKYIVV4sDR+XNtRy3EWf2rWw7xulYFDMPiujjtElF2qjTswzcpLtYOXgOZN9A==",
"version": "0.8.10",
"resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.10.tgz",
"integrity": "sha512-1/CAEidIoY1PWw2mhwZChchK4fvLdHfdoB7AEikWMYFSbjYY6ZiayT+Q3z48wsiS/LTNugF/YJDJHQi4+qjuug==",
"requires": {
"apollo-server-env": "^2.4.3",
"graphql-extensions": "^0.10.8"
"graphql-extensions": "^0.10.9"
}
},
"apollo-datasource": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.6.3.tgz",
"integrity": "sha512-gRYyFVpJgHE2hhS+VxMeOerxXQ/QYxWG7T6QddfugJWYAG9DRCl65e2b7txcGq2NP3r+O1iCm4GNwhRBDJbd8A==",
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.6.4.tgz",
"integrity": "sha512-u4eu6Q94q6KuZacZfdo4vCevA81F4QWeTYEXUvoksQMJpiacPHHe0DJrofKVKvxngUp5kCi1RnPXSc6kBY+/oA==",
"requires": {
"apollo-server-caching": "^0.5.0",
"apollo-server-caching": "^0.5.1",
"apollo-server-env": "^2.4.3"
}
},
"apollo-engine-reporting": {
"version": "1.4.12",
"resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.12.tgz",
"integrity": "sha512-W1PpXaXSrqZu4Ae9NrjWXtTL9HFbQPynQLiGDAsDmCsL/wRAVyl6qRhVteSj7drwgXgAH5TwtUCnjJgSI+ixlg==",
"version": "1.4.13",
"resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.13.tgz",
"integrity": "sha512-p5fVmQigNGXoxCHnu8Bb6itNfwtjGnoyLf9i4oP0vfdSnTjaNI8KM7zXv16t1YnE/wsqYuieCnleoPSBReTy9Q==",
"requires": {
"apollo-engine-reporting-protobuf": "^0.4.4",
"apollo-graphql": "^0.3.4",
"apollo-server-caching": "^0.5.0",
"apollo-server-caching": "^0.5.1",
"apollo-server-env": "^2.4.3",
"apollo-server-types": "^0.2.9",
"apollo-server-errors": "^2.3.4",
"apollo-server-types": "^0.2.10",
"async-retry": "^1.2.1",
"graphql-extensions": "^0.10.8"
"graphql-extensions": "^0.10.9"
}
},
"apollo-engine-reporting-protobuf": {
@ -438,33 +439,33 @@
}
},
"apollo-server-caching": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.0.tgz",
"integrity": "sha512-l7ieNCGxUaUAVAAp600HjbUJxVaxjJygtPV0tPTe1Q3HkPy6LEWoY6mNHV7T268g1hxtPTxcdRu7WLsJrg7ufw==",
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.1.tgz",
"integrity": "sha512-L7LHZ3k9Ao5OSf2WStvQhxdsNVplRQi7kCAPfqf9Z3GBEnQ2uaL0EgO0hSmtVHfXTbk5CTRziMT1Pe87bXrFIw==",
"requires": {
"lru-cache": "^5.0.0"
}
},
"apollo-server-core": {
"version": "2.9.14",
"resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.14.tgz",
"integrity": "sha512-Vc8TicXFFZGuEgo5AY1Ey0XuvHn7NQS1y7WxOQnr85KJ2zeRa6uIT8tU+73ZObzan3nlm9ysYtfSXh2QL21oyg==",
"version": "2.9.15",
"resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.9.15.tgz",
"integrity": "sha512-MgqtxZkUO2u7cSDQjp8feQlyHT/iZlKv3TV5kNy+xa9ewbfiR/qjziMsz46x+oVPBah+VH9WbGShSbVO0b2TJA==",
"requires": {
"@apollographql/apollo-tools": "^0.4.0",
"@apollographql/graphql-playground-html": "1.6.24",
"@types/graphql-upload": "^8.0.0",
"@types/ws": "^6.0.0",
"apollo-cache-control": "^0.8.9",
"apollo-datasource": "^0.6.3",
"apollo-engine-reporting": "^1.4.12",
"apollo-server-caching": "^0.5.0",
"apollo-cache-control": "^0.8.10",
"apollo-datasource": "^0.6.4",
"apollo-engine-reporting": "^1.4.13",
"apollo-server-caching": "^0.5.1",
"apollo-server-env": "^2.4.3",
"apollo-server-errors": "^2.3.4",
"apollo-server-plugin-base": "^0.6.9",
"apollo-server-types": "^0.2.9",
"apollo-tracing": "^0.8.9",
"apollo-server-plugin-base": "^0.6.10",
"apollo-server-types": "^0.2.10",
"apollo-tracing": "^0.8.10",
"fast-json-stable-stringify": "^2.0.0",
"graphql-extensions": "^0.10.8",
"graphql-extensions": "^0.10.9",
"graphql-tag": "^2.9.2",
"graphql-tools": "^4.0.0",
"graphql-upload": "^8.0.2",
@ -488,9 +489,9 @@
"integrity": "sha512-Y0PKQvkrb2Kd18d1NPlHdSqmlr8TgqJ7JQcNIfhNDgdb45CnqZlxL1abuIRhr8tiw8OhVOcFxz2KyglBi8TKdA=="
},
"apollo-server-express": {
"version": "2.9.14",
"resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.14.tgz",
"integrity": "sha512-ai+VKPlOUzJsbSQcazjATNtWwdgcvZBWBCbTF7ZUC9Uo6FfSlKOmP3raQAq+gKqsnFwv34p4k17c/Asw5ZjSMQ==",
"version": "2.9.15",
"resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.9.15.tgz",
"integrity": "sha512-RrPFAW6QqxAGAlubdvxjluGc7SOr70H69ElLxDgXy3HREXN25Y4XZoCE+L3PoURwFy2mNtITZeDO7JKW1cbHNg==",
"requires": {
"@apollographql/graphql-playground-html": "1.6.24",
"@types/accepts": "^1.3.5",
@ -498,8 +499,8 @@
"@types/cors": "^2.8.4",
"@types/express": "4.17.1",
"accepts": "^1.3.5",
"apollo-server-core": "^2.9.14",
"apollo-server-types": "^0.2.9",
"apollo-server-core": "^2.9.15",
"apollo-server-types": "^0.2.10",
"body-parser": "^1.18.3",
"cors": "^2.8.4",
"express": "^4.17.1",
@ -511,30 +512,30 @@
}
},
"apollo-server-plugin-base": {
"version": "0.6.9",
"resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.9.tgz",
"integrity": "sha512-75rorl0y07PK7A/U1Oe9unLIGgbmy1T6uaCQ5zl8zy+mtmFFcH1nYERfXZha1eTDWLCx0F/xNI6YJmWxSisc5w==",
"version": "0.6.10",
"resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.10.tgz",
"integrity": "sha512-/xT7UT/tbCDIoTQ4lcEQsJ0ACh7h7QG0BDmeSlDXjwDuENRI50bQ2QoluCMPitZXGe+FCQfLhvzFgzbsZGT0IA==",
"requires": {
"apollo-server-types": "^0.2.9"
"apollo-server-types": "^0.2.10"
}
},
"apollo-server-types": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.9.tgz",
"integrity": "sha512-Iu9twx3lycH41F8shmrb33b4y0mNBz1chBdTIaSgIMmNwPDR4xs4eB6iyTK5swnaYC1eW+c+t5lHRUk7yexs/g==",
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.10.tgz",
"integrity": "sha512-ke9ViPEWfW+2XLe66CaKGVZdS7duSLbamSKSprmmeMBd8s6tmjf0FumUVxV7X4quxPZi0OPo8x0LoLU7GWsmaA==",
"requires": {
"apollo-engine-reporting-protobuf": "^0.4.4",
"apollo-server-caching": "^0.5.0",
"apollo-server-caching": "^0.5.1",
"apollo-server-env": "^2.4.3"
}
},
"apollo-tracing": {
"version": "0.8.9",
"resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.9.tgz",
"integrity": "sha512-DYHPUW0rFcxxtI8+qU3leNU+fKfq9NPTjgPMr/AJmxKfsdOI6QgfVzVP/khiik0kU0+BMl5zBplwEDDdgbkUlg==",
"version": "0.8.10",
"resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.10.tgz",
"integrity": "sha512-EjToHqHdDrjj0xBRnbie57lz3U81Onrs55YqHhvzaMv8gDAeKX3rnXiw5EfYZNxR7uutoyXH0iNKaYPyolWbZA==",
"requires": {
"apollo-server-env": "^2.4.3",
"graphql-extensions": "^0.10.8"
"graphql-extensions": "^0.10.9"
}
},
"apollo-utilities": {
@ -606,9 +607,9 @@
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
"async-retry": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz",
"integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==",
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz",
"integrity": "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==",
"requires": {
"retry": "0.12.0"
}
@ -1031,9 +1032,9 @@
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-js": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.0.tgz",
"integrity": "sha512-AHPTNKzyB+YwgDWoSOCaid9PUSEF6781vsfiK8qUz62zRR448/XgK2NtCbpiUGizbep8Lrpt0Du19PpGGZvw3Q=="
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz",
"integrity": "sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg=="
},
"core-util-is": {
"version": "1.0.2",
@ -1279,26 +1280,27 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"es-abstract": {
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz",
"integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==",
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz",
"integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==",
"requires": {
"es-to-primitive": "^1.2.0",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.0",
"is-callable": "^1.1.4",
"is-regex": "^1.0.4",
"object-inspect": "^1.6.0",
"has-symbols": "^1.0.1",
"is-callable": "^1.1.5",
"is-regex": "^1.0.5",
"object-inspect": "^1.7.0",
"object-keys": "^1.1.1",
"string.prototype.trimleft": "^2.1.0",
"string.prototype.trimright": "^2.1.0"
"object.assign": "^4.1.0",
"string.prototype.trimleft": "^2.1.1",
"string.prototype.trimright": "^2.1.1"
}
},
"es-to-primitive": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
"integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@ -1356,9 +1358,9 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
"version": "6.7.2",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz",
"integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==",
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
"integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@ -1922,13 +1924,13 @@
}
},
"graphql-extensions": {
"version": "0.10.8",
"resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.8.tgz",
"integrity": "sha512-cUcc014vz+pfwcER8pc4ts/WWhDCrC9jhNFIiWYYntd2TshS+tZFsZ362i4P2VYLbpYCgFiO+xRY1f2mylyz5A==",
"version": "0.10.9",
"resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.10.9.tgz",
"integrity": "sha512-NJdV8aGVGCrcm1Pbq8IbmV5FfLCAEPxgplh9EJU7qAP+Z4PenkuH6V6RAPRqIwwZ287m8/aDXKW+X0qFe8gyUQ==",
"requires": {
"@apollographql/apollo-tools": "^0.4.0",
"apollo-server-env": "^2.4.3",
"apollo-server-types": "^0.2.9"
"apollo-server-types": "^0.2.10"
}
},
"graphql-subscriptions": {
@ -1995,9 +1997,9 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"has-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
},
"has-unicode": {
"version": "2.0.1",
@ -2173,9 +2175,9 @@
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"inquirer": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz",
"integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==",
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.3.tgz",
"integrity": "sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw==",
"dev": true,
"requires": {
"ansi-escapes": "^4.2.1",
@ -2254,9 +2256,9 @@
"integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI="
},
"is-callable": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
"integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
"integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q=="
},
"is-ci": {
"version": "1.2.1",
@ -2267,9 +2269,9 @@
}
},
"is-date-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
"integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
},
"is-extglob": {
"version": "2.1.1",
@ -2337,11 +2339,11 @@
"integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
},
"is-regex": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
"integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
"integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
"requires": {
"has": "^1.0.1"
"has": "^1.0.3"
}
},
"is-retry-allowed": {
@ -2355,11 +2357,11 @@
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"is-symbol": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
"integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
"requires": {
"has-symbols": "^1.0.0"
"has-symbols": "^1.0.1"
}
},
"is-typedarray": {
@ -2543,12 +2545,12 @@
}
},
"mariadb": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.1.4.tgz",
"integrity": "sha512-CMLbIKZCzxero94luo25IKpboEuUCvA2g2+NMUBdRYpBCDmnsiQ8kwdgqvuVQ13a4/ZKr87BC1nbe4b3UZXXmQ==",
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.1.5.tgz",
"integrity": "sha512-uRHtjc0bg+Rt91LvIaZNo8tLcYs9YPiiW9Mke/BavFzg0MnctJBDkqZW9X59NyrRGDd7Oz9UshTWgmUpfDZc0Q==",
"requires": {
"@types/geojson": "^7946.0.7",
"@types/node": "^12.12.11",
"@types/node": "^13.1.4",
"denque": "^1.4.1",
"iconv-lite": "^0.5.0",
"long": "^4.0.0",
@ -2556,9 +2558,9 @@
},
"dependencies": {
"@types/node": {
"version": "12.12.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.21.tgz",
"integrity": "sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA=="
"version": "13.1.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz",
"integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA=="
},
"iconv-lite": {
"version": "0.5.0",
@ -2743,9 +2745,9 @@
"dev": true
},
"mysql2": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.0.2.tgz",
"integrity": "sha512-n9Tiw8LzrfOnH1CLFw0AWJlkQLOWMSr2Q+/aF5jRJ7SRRJLGrY9FidhyoTEhF0FxQYE+xABvXwiZl4b61Mt4eg==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.1.0.tgz",
"integrity": "sha512-9kGVyi930rG2KaHrz3sHwtc6K+GY9d8wWk1XRSYxQiunvGcn4DwuZxOwmK11ftuhhwrYDwGx9Ta4VBwznJn36A==",
"requires": {
"cardinal": "^2.1.1",
"denque": "^1.4.1",
@ -2994,9 +2996,9 @@
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-inspect": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
"integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ=="
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
},
"object-keys": {
"version": "1.1.1",
@ -3008,13 +3010,24 @@
"resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
"integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk="
},
"object.getownpropertydescriptors": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
"integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
"object.assign": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
"requires": {
"define-properties": "^1.1.2",
"es-abstract": "^1.5.1"
"function-bind": "^1.1.1",
"has-symbols": "^1.0.0",
"object-keys": "^1.0.11"
}
},
"object.getownpropertydescriptors": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
"integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1"
}
},
"on-finished": {
@ -3174,14 +3187,15 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"pg": {
"version": "7.15.1",
"resolved": "https://registry.npmjs.org/pg/-/pg-7.15.1.tgz",
"integrity": "sha512-o293Pxx5bNRpTv3Dh4+IIhPbTw19Bo4zvppLgR+MAV2I7AF3sMr9gPB4JPvBffWb24pDfC+7Ghe6xh2VxVMBpQ==",
"version": "7.17.0",
"resolved": "https://registry.npmjs.org/pg/-/pg-7.17.0.tgz",
"integrity": "sha512-70Q4ZzIdPgwMPb3zUIzAUwigNJ4v5vsWdMED6OzXMfOECeYTvTm7iSC3FpKizu/R1BHL8Do3bLs6ltGfOTAnqg==",
"requires": {
"buffer-writer": "2.0.0",
"packet-reader": "1.0.0",
"pg-connection-string": "0.1.3",
"pg-pool": "^2.0.7",
"pg-packet-stream": "^1.1.0",
"pg-pool": "^2.0.9",
"pg-types": "^2.1.0",
"pgpass": "1.x",
"semver": "4.3.2"
@ -3204,10 +3218,15 @@
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
},
"pg-packet-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz",
"integrity": "sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg=="
},
"pg-pool": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.8.tgz",
"integrity": "sha512-UE4H+4PT53RbwYaGxkeVDcMcp1g8EmYo91qeUugijsHwzV/RDpYVRWzmfiDisEQZhVDzyf/GUctNOrh+ZPJCGA=="
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.9.tgz",
"integrity": "sha512-gNiuIEKNCT3OnudQM2kvgSnXsLkSpd6mS/fRnqs6ANtrke6j8OY5l9mnAryf1kgwJMWLg0C1N1cYTZG1xmEYHQ=="
},
"pg-types": {
"version": "2.2.0",
@ -3550,9 +3569,9 @@
}
},
"rxjs": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
"integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
"integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@ -3826,18 +3845,18 @@
}
},
"string.prototype.trimleft": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
"integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
"integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
}
},
"string.prototype.trimright": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
"integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
"integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"

View file

@ -1,6 +1,6 @@
{
"name": "rdio-scanner-server",
"version": "2.1.0",
"version": "2.5.0",
"private": true,
"main": "index.js",
"scripts": {
@ -10,25 +10,25 @@
"author": "Chrystian Huot",
"license": "LICENSE",
"dependencies": {
"apollo-datasource": "^0.6.3",
"apollo-server-express": "^2.9.14",
"apollo-datasource": "^0.6.4",
"apollo-server-express": "^2.9.15",
"camelcase": "^5.3.1",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"graphql": "^14.5.8",
"helmet": "^3.21.2",
"mariadb": "^2.1.4",
"mariadb": "^2.1.5",
"multer": "^1.4.2",
"mysql2": "^2.0.2",
"mysql2": "^2.1.0",
"nodemon": "^2.0.2",
"pg": "^7.15.1",
"pg": "^7.17.0",
"sequelize": "^5.21.3",
"sequelize-cli": "^5.5.1",
"sqlite3": "^4.1.1",
"uuid": "^3.3.3"
},
"devDependencies": {
"eslint": "^6.7.2"
"eslint": "^6.8.0"
}
}

View file

@ -52,7 +52,7 @@ module.exports = ({ pubsub, store }) => (req, res) => upload.fields([
}
const emit = () => {
store.rdioScannerSystem.findAll().then((systems) => {
store.rdioScannerSystem.findAll({ order: [['system', 'ASC']]}).then((systems) => {
pubsub.publish('rdioScannerSystems', { rdioScannerSystems: systemReducer(systems) });
})
};
@ -60,12 +60,21 @@ module.exports = ({ pubsub, store }) => (req, res) => upload.fields([
if (system.talkgroups.length) {
system.talkgroups = JSON.stringify(system.talkgroups);
store.rdioScannerSystem.upsert(system)
.then(() => {
store.rdioScannerSystem.findOne({ where: { system: system.system } })
.then((rdioScannerSystem) => {
if (rdioScannerSystem) {
rdioScannerSystem.update(system).then(() => {
emit();
res.send(`System ${system.name} updated successfully.\n`);
});
} else {
store.rdioScannerSystem.create(system).then(() => {
emit();
res.send(`System ${system.name} imported successfully.\n`);
})
.catch((err) => res.send(err.message));
});
}
});
} else {
store.rdioScannerSystem.destroy({ where: { system: system.system } })