tabletcommand-backend-models 7.4.110 → 7.4.112
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/constants.js +6 -1
- package/build/constants.js.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/models/department.js +78 -3
- package/build/models/department.js.map +1 -1
- package/build/models/drone-connection.js +101 -0
- package/build/models/drone-connection.js.map +1 -0
- package/build/models/user.js +4 -0
- package/build/models/user.js.map +1 -1
- package/build/test/department.js +5 -0
- package/build/test/department.js.map +1 -1
- package/build/test/drone-connection.js +152 -0
- package/build/test/drone-connection.js.map +1 -0
- package/build/test/user.js +10 -0
- package/build/test/user.js.map +1 -1
- package/build/types/drone-connection.js +3 -0
- package/build/types/drone-connection.js.map +1 -0
- package/cspell.json +1 -0
- package/definitions/constants.d.ts +4 -0
- package/definitions/constants.d.ts.map +1 -1
- package/definitions/index.d.ts +9 -2
- package/definitions/index.d.ts.map +1 -1
- package/definitions/models/department.d.ts +15 -10
- package/definitions/models/department.d.ts.map +1 -1
- package/definitions/models/drone-connection.d.ts +22 -0
- package/definitions/models/drone-connection.d.ts.map +1 -0
- package/definitions/models/user.d.ts.map +1 -1
- package/definitions/test/drone-connection.d.ts +2 -0
- package/definitions/test/drone-connection.d.ts.map +1 -0
- package/definitions/types/department.d.ts +15 -0
- package/definitions/types/department.d.ts.map +1 -1
- package/definitions/types/drone-connection.d.ts +19 -0
- package/definitions/types/drone-connection.d.ts.map +1 -0
- package/definitions/types/user.d.ts +1 -0
- package/definitions/types/user.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/constants.ts +5 -0
- package/src/index.ts +8 -0
- package/src/models/department.ts +85 -3
- package/src/models/drone-connection.ts +121 -0
- package/src/models/user.ts +4 -0
- package/src/test/department.ts +6 -0
- package/src/test/drone-connection.ts +164 -0
- package/src/test/user.ts +11 -0
- package/src/types/department.ts +17 -0
- package/src/types/drone-connection.ts +21 -0
- package/src/types/user.ts +1 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Types } from "mongoose";
|
|
2
|
+
import { DroneProvider } from "../constants";
|
|
3
|
+
import { EncryptedDataType } from "./common";
|
|
4
|
+
export interface DroneConnectionOptionsType {
|
|
5
|
+
drones: "all" | "listed";
|
|
6
|
+
serials: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface DroneConnectionType {
|
|
9
|
+
_id: Types.ObjectId;
|
|
10
|
+
departmentId: Types.ObjectId;
|
|
11
|
+
provider: DroneProvider;
|
|
12
|
+
active: boolean;
|
|
13
|
+
label: string;
|
|
14
|
+
authToken: EncryptedDataType;
|
|
15
|
+
authSecret: EncryptedDataType;
|
|
16
|
+
options?: DroneConnectionOptionsType;
|
|
17
|
+
modified: Date;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=drone-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drone-connection.d.ts","sourceRoot":"","sources":["../../src/types/drone-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAElC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,iBAAiB,CAAC;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC;CAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/constants.ts
CHANGED
|
@@ -10,6 +10,7 @@ export enum LocationSource {
|
|
|
10
10
|
MotorolaConverged = "MotorolaConverged",
|
|
11
11
|
OneStep = "OneStep",
|
|
12
12
|
Samsara = "Samsara",
|
|
13
|
+
Skydio = "Skydio",
|
|
13
14
|
Skymira = "Skymira",
|
|
14
15
|
SKYTRAC = "SKYTRAC",
|
|
15
16
|
Somewear = "Somewear",
|
|
@@ -22,6 +23,10 @@ export enum LocationSource {
|
|
|
22
23
|
VehicleModem = "VehicleModem"
|
|
23
24
|
}
|
|
24
25
|
|
|
26
|
+
export enum DroneProvider {
|
|
27
|
+
Skydio = "skydio"
|
|
28
|
+
}
|
|
29
|
+
|
|
25
30
|
export enum LocationKindType {
|
|
26
31
|
FixedWing = "fixed-wing",
|
|
27
32
|
Helicopter = "helicopter",
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ export {
|
|
|
6
6
|
AccountCallerType,
|
|
7
7
|
AccountIndustry,
|
|
8
8
|
DepartmentReportOdometer,
|
|
9
|
+
DroneProvider,
|
|
9
10
|
FireMapperLayers,
|
|
10
11
|
IncidentFilterKind,
|
|
11
12
|
LocationKindType,
|
|
@@ -52,6 +53,7 @@ async function wireModels(mongoose: MongooseModule) {
|
|
|
52
53
|
AudioStreamAuthentication: await getModel(import("./models/audio-stream-authentication")),
|
|
53
54
|
Department: await getModel(import("./models/department")),
|
|
54
55
|
DeviceMapping: await getModel(import("./models/device-mapping")),
|
|
56
|
+
DroneConnection: await getModel(import("./models/drone-connection")),
|
|
55
57
|
Esri: await getModel(import("./models/esri")),
|
|
56
58
|
GSTMapping: await getModel(import("./models/gst-mapping")),
|
|
57
59
|
GlobalSettings: await getModel(import("./models/global-settings")),
|
|
@@ -120,6 +122,7 @@ export { CSVImport, CSVImportModel } from "./models/csv-import";
|
|
|
120
122
|
export { AudioStreamAuthentication, AudioStreamAuthenticationModel } from "./models/audio-stream-authentication";
|
|
121
123
|
export { Department, DepartmentModel } from "./models/department";
|
|
122
124
|
export { DeviceMapping, DeviceMappingModel } from "./models/device-mapping";
|
|
125
|
+
export { DroneConnection, DroneConnectionModel } from "./models/drone-connection";
|
|
123
126
|
export { Esri, EsriModel } from "./models/esri";
|
|
124
127
|
export { GSTMapping, GSTMappingModel } from "./models/gst-mapping";
|
|
125
128
|
export { GlobalSettings, GlobalSettingsModel } from "./models/global-settings";
|
|
@@ -166,11 +169,16 @@ export * from "./checklist-item-event-message";
|
|
|
166
169
|
|
|
167
170
|
// Export types
|
|
168
171
|
export type {
|
|
172
|
+
DronesConfigurationType,
|
|
169
173
|
ForwardingConnectionType,
|
|
170
174
|
ForwardingConfigType,
|
|
171
175
|
ForwardFieldsType,
|
|
172
176
|
IntegrationType,
|
|
173
177
|
} from "./types/department";
|
|
178
|
+
export type {
|
|
179
|
+
DroneConnectionOptionsType,
|
|
180
|
+
DroneConnectionType,
|
|
181
|
+
} from "./types/drone-connection";
|
|
174
182
|
export type {
|
|
175
183
|
CADInterfaceMetaDataType,
|
|
176
184
|
} from "./types/cad-interface-meta-data";
|
package/src/models/department.ts
CHANGED
|
@@ -57,6 +57,7 @@ import {
|
|
|
57
57
|
ManagedIncidentModeItem,
|
|
58
58
|
ManagedIncidentPriority,
|
|
59
59
|
ManagedIncidentPriorityItem,
|
|
60
|
+
GMRConfigType,
|
|
60
61
|
Mark43ConfigType,
|
|
61
62
|
Mark43ProcessCommentConfigType,
|
|
62
63
|
Mark43ProcessConfigType,
|
|
@@ -78,6 +79,7 @@ import {
|
|
|
78
79
|
UnitStatusCodesConfigType,
|
|
79
80
|
OneStepConfigurationType,
|
|
80
81
|
DroneSenseConfigurationType,
|
|
82
|
+
DronesConfigurationType,
|
|
81
83
|
USFTConfigurationType,
|
|
82
84
|
VehicleStatusWebhookConfigType,
|
|
83
85
|
VehicleStatusWebhookConnectionType,
|
|
@@ -88,7 +90,7 @@ import {
|
|
|
88
90
|
export interface Department extends DepartmentType, Record<string, unknown> {
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
export const Mark43StatusConfigDefault = {
|
|
93
|
+
export const Mark43StatusConfigDefault: UnitStatusCodesConfigType = {
|
|
92
94
|
TimeDispatched: ["D"],
|
|
93
95
|
TimeEnroute: ["EN"],
|
|
94
96
|
TimeStaged: ["ST"],
|
|
@@ -98,6 +100,16 @@ export const Mark43StatusConfigDefault = {
|
|
|
98
100
|
TimeArrived: ["ATS", "A"],
|
|
99
101
|
};
|
|
100
102
|
|
|
103
|
+
export const GMRStatusConfigDefault: UnitStatusCodesConfigType = {
|
|
104
|
+
TimeDispatched: ["SentToVehicle"],
|
|
105
|
+
TimeEnroute: ["EnRouteToPickup"],
|
|
106
|
+
TimeStaged: [],
|
|
107
|
+
TimeCleared: ["Finished"],
|
|
108
|
+
TimeAtHospital: [],
|
|
109
|
+
TimeTransporting: [],
|
|
110
|
+
TimeArrived: ["ArrivedToPickup"],
|
|
111
|
+
};
|
|
112
|
+
|
|
101
113
|
export const IntterraFieldsDefault = [
|
|
102
114
|
{
|
|
103
115
|
key: "IncidentNumber",
|
|
@@ -280,6 +292,16 @@ export const Mark43ConfigDefault = {
|
|
|
280
292
|
enabled: false,
|
|
281
293
|
};
|
|
282
294
|
|
|
295
|
+
export const GMRConfigDefault = {
|
|
296
|
+
baseUrl: "",
|
|
297
|
+
authToken: "",
|
|
298
|
+
apiToken: "",
|
|
299
|
+
enabled: false,
|
|
300
|
+
webhookSecret: "",
|
|
301
|
+
agencyId: "",
|
|
302
|
+
radioNamePrefixesToStrip: [],
|
|
303
|
+
};
|
|
304
|
+
|
|
283
305
|
export const WebhookConfigDefault = {
|
|
284
306
|
enabled: false,
|
|
285
307
|
bulkProcessingEnabled: false,
|
|
@@ -526,6 +548,10 @@ export const DroneSenseConfigurationDefault = {
|
|
|
526
548
|
apiKey: "",
|
|
527
549
|
};
|
|
528
550
|
|
|
551
|
+
export const DronesConfigurationDefault = {
|
|
552
|
+
enabled: false,
|
|
553
|
+
};
|
|
554
|
+
|
|
529
555
|
export const OrientationMarkerColorDefault: ColorSchemaType = {
|
|
530
556
|
background: "#FC2125",
|
|
531
557
|
text: "#FFFFFF",
|
|
@@ -568,7 +594,7 @@ export default async function DepartmentModule(mongoose: MongooseModule) {
|
|
|
568
594
|
const WebhookConfig = WebhookSchema(mongoose);
|
|
569
595
|
const WSFeedConfig = WSFeedSchema(mongoose);
|
|
570
596
|
|
|
571
|
-
const
|
|
597
|
+
const UnitStatusCodesConfig = new Schema<UnitStatusCodesConfigType>({
|
|
572
598
|
TimeDispatched: {
|
|
573
599
|
type: [String],
|
|
574
600
|
default: []
|
|
@@ -693,7 +719,7 @@ export default async function DepartmentModule(mongoose: MongooseModule) {
|
|
|
693
719
|
default: false,
|
|
694
720
|
},
|
|
695
721
|
unitStatusCodes: {
|
|
696
|
-
type:
|
|
722
|
+
type: UnitStatusCodesConfig,
|
|
697
723
|
default: Mark43StatusConfigDefault,
|
|
698
724
|
},
|
|
699
725
|
process: {
|
|
@@ -704,6 +730,44 @@ export default async function DepartmentModule(mongoose: MongooseModule) {
|
|
|
704
730
|
id: false,
|
|
705
731
|
});
|
|
706
732
|
|
|
733
|
+
const GMRConfig = new Schema<GMRConfigType>({
|
|
734
|
+
baseUrl: {
|
|
735
|
+
type: String,
|
|
736
|
+
default: "",
|
|
737
|
+
},
|
|
738
|
+
authToken: {
|
|
739
|
+
type: String,
|
|
740
|
+
default: "",
|
|
741
|
+
},
|
|
742
|
+
apiToken: {
|
|
743
|
+
type: String,
|
|
744
|
+
default: "",
|
|
745
|
+
},
|
|
746
|
+
enabled: {
|
|
747
|
+
type: Boolean,
|
|
748
|
+
default: false,
|
|
749
|
+
},
|
|
750
|
+
unitStatusCodes: {
|
|
751
|
+
type: UnitStatusCodesConfig,
|
|
752
|
+
default: GMRStatusConfigDefault,
|
|
753
|
+
},
|
|
754
|
+
webhookSecret: {
|
|
755
|
+
type: String,
|
|
756
|
+
default: "",
|
|
757
|
+
},
|
|
758
|
+
agencyId: {
|
|
759
|
+
type: String,
|
|
760
|
+
default: "",
|
|
761
|
+
},
|
|
762
|
+
radioNamePrefixesToStrip: {
|
|
763
|
+
type: [String],
|
|
764
|
+
default: [],
|
|
765
|
+
},
|
|
766
|
+
}, {
|
|
767
|
+
_id: false,
|
|
768
|
+
id: false,
|
|
769
|
+
});
|
|
770
|
+
|
|
707
771
|
const IntterraFields = new Schema<IntterraFieldsType>({
|
|
708
772
|
key: {
|
|
709
773
|
type: String,
|
|
@@ -1470,6 +1534,16 @@ export default async function DepartmentModule(mongoose: MongooseModule) {
|
|
|
1470
1534
|
id: false,
|
|
1471
1535
|
});
|
|
1472
1536
|
|
|
1537
|
+
const DronesConfiguration = new Schema<DronesConfigurationType>({
|
|
1538
|
+
enabled: {
|
|
1539
|
+
type: Boolean,
|
|
1540
|
+
default: false,
|
|
1541
|
+
},
|
|
1542
|
+
}, {
|
|
1543
|
+
_id: false,
|
|
1544
|
+
id: false,
|
|
1545
|
+
});
|
|
1546
|
+
|
|
1473
1547
|
const FireMapperConfiguration = new Schema<FireMapperConfigurationType>({
|
|
1474
1548
|
enabled: {
|
|
1475
1549
|
type: Boolean,
|
|
@@ -2351,10 +2425,18 @@ export default async function DepartmentModule(mongoose: MongooseModule) {
|
|
|
2351
2425
|
type: DroneSenseConfiguration,
|
|
2352
2426
|
default: DroneSenseConfigurationDefault,
|
|
2353
2427
|
},
|
|
2428
|
+
drones: {
|
|
2429
|
+
type: DronesConfiguration,
|
|
2430
|
+
default: DronesConfigurationDefault,
|
|
2431
|
+
},
|
|
2354
2432
|
mark43: {
|
|
2355
2433
|
type: Mark43Config,
|
|
2356
2434
|
default: Mark43ConfigDefault
|
|
2357
2435
|
},
|
|
2436
|
+
gmr: {
|
|
2437
|
+
type: GMRConfig,
|
|
2438
|
+
default: GMRConfigDefault
|
|
2439
|
+
},
|
|
2358
2440
|
webhook: {
|
|
2359
2441
|
type: WebhookConfig,
|
|
2360
2442
|
default: WebhookConfigDefault,
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Model } from "mongoose";
|
|
2
|
+
|
|
3
|
+
import { DroneProvider } from "../constants";
|
|
4
|
+
import {
|
|
5
|
+
currentDate,
|
|
6
|
+
MongooseModule,
|
|
7
|
+
} from "../helpers";
|
|
8
|
+
import { EncryptedDataType } from "../types/common";
|
|
9
|
+
import {
|
|
10
|
+
DroneConnectionOptionsType,
|
|
11
|
+
DroneConnectionType,
|
|
12
|
+
} from "../types/drone-connection";
|
|
13
|
+
|
|
14
|
+
export interface DroneConnection extends DroneConnectionType, Record<string, unknown> {
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const EncryptedDataDefault: EncryptedDataType = {
|
|
18
|
+
iv: "",
|
|
19
|
+
encryptedData: "",
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export function DroneConnectionSchema(mongoose: MongooseModule) {
|
|
23
|
+
const { Schema } = mongoose;
|
|
24
|
+
|
|
25
|
+
const EncryptedData = new Schema<EncryptedDataType>({
|
|
26
|
+
iv: {
|
|
27
|
+
type: String,
|
|
28
|
+
default: "",
|
|
29
|
+
},
|
|
30
|
+
encryptedData: {
|
|
31
|
+
type: String,
|
|
32
|
+
default: "",
|
|
33
|
+
},
|
|
34
|
+
}, {
|
|
35
|
+
_id: false,
|
|
36
|
+
id: false,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const DroneConnectionOptions = new Schema<DroneConnectionOptionsType>({
|
|
40
|
+
drones: {
|
|
41
|
+
type: String,
|
|
42
|
+
enum: ["all", "listed"],
|
|
43
|
+
default: "all",
|
|
44
|
+
},
|
|
45
|
+
serials: {
|
|
46
|
+
type: [String],
|
|
47
|
+
default: [],
|
|
48
|
+
},
|
|
49
|
+
}, {
|
|
50
|
+
_id: false,
|
|
51
|
+
id: false,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const modelSchema = new Schema<DroneConnectionType>({
|
|
55
|
+
departmentId: {
|
|
56
|
+
type: Schema.Types.ObjectId,
|
|
57
|
+
ref: "Department",
|
|
58
|
+
required: true,
|
|
59
|
+
},
|
|
60
|
+
provider: {
|
|
61
|
+
type: String,
|
|
62
|
+
enum: Object.values(DroneProvider),
|
|
63
|
+
required: true,
|
|
64
|
+
},
|
|
65
|
+
active: {
|
|
66
|
+
type: Boolean,
|
|
67
|
+
default: false,
|
|
68
|
+
},
|
|
69
|
+
label: {
|
|
70
|
+
type: String,
|
|
71
|
+
default: "",
|
|
72
|
+
},
|
|
73
|
+
authToken: {
|
|
74
|
+
type: EncryptedData,
|
|
75
|
+
default: EncryptedDataDefault,
|
|
76
|
+
},
|
|
77
|
+
authSecret: {
|
|
78
|
+
type: EncryptedData,
|
|
79
|
+
default: EncryptedDataDefault,
|
|
80
|
+
},
|
|
81
|
+
options: {
|
|
82
|
+
type: DroneConnectionOptions,
|
|
83
|
+
required: false,
|
|
84
|
+
},
|
|
85
|
+
modified: {
|
|
86
|
+
type: Date,
|
|
87
|
+
default: currentDate,
|
|
88
|
+
},
|
|
89
|
+
}, {
|
|
90
|
+
autoIndex: false,
|
|
91
|
+
timestamps: {
|
|
92
|
+
createdAt: false,
|
|
93
|
+
updatedAt: "modified",
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
modelSchema.index({
|
|
98
|
+
departmentId: 1,
|
|
99
|
+
}, {
|
|
100
|
+
name: "departmentId_1",
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
modelSchema.index({
|
|
104
|
+
departmentId: 1,
|
|
105
|
+
provider: 1,
|
|
106
|
+
label: 1,
|
|
107
|
+
}, {
|
|
108
|
+
name: "departmentId_1_provider_1_label_1_unique",
|
|
109
|
+
unique: true,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
return modelSchema;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export default async function DroneConnectionModule(mongoose: MongooseModule) {
|
|
116
|
+
const modelSchema = DroneConnectionSchema(mongoose);
|
|
117
|
+
return mongoose.model<DroneConnection>("DroneConnection", modelSchema, "massive_drone_connection", { overwriteModels: true });
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface DroneConnectionModel extends Model<DroneConnection> {
|
|
121
|
+
}
|
package/src/models/user.ts
CHANGED
package/src/test/department.ts
CHANGED
|
@@ -139,6 +139,12 @@ describe("Department", function () {
|
|
|
139
139
|
assert.isFalse(sut.watchDuty.visible);
|
|
140
140
|
});
|
|
141
141
|
|
|
142
|
+
it("defaults drones to disabled", async function () {
|
|
143
|
+
const item = new models.Department(testItem);
|
|
144
|
+
const sut = await item.save();
|
|
145
|
+
assert.isFalse(sut.drones.enabled);
|
|
146
|
+
});
|
|
147
|
+
|
|
142
148
|
it("saves samsara.tagIds and defaults it to an empty array", async function () {
|
|
143
149
|
const item = new models.Department({
|
|
144
150
|
...testItem,
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
import { Types } from "mongoose";
|
|
3
|
+
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
4
|
+
import * as m from "../index";
|
|
5
|
+
import * as config from "./config";
|
|
6
|
+
|
|
7
|
+
describe("DroneConnection", function() {
|
|
8
|
+
let models: m.BackendModels, mongoose: m.MongooseModule;
|
|
9
|
+
let departmentId: Types.ObjectId;
|
|
10
|
+
|
|
11
|
+
beforeEach(async function() {
|
|
12
|
+
const c = await m.connect(config.url);
|
|
13
|
+
models = c.models;
|
|
14
|
+
mongoose = c.mongoose;
|
|
15
|
+
departmentId = new mongoose.Types.ObjectId();
|
|
16
|
+
await models.DroneConnection.syncIndexes();
|
|
17
|
+
});
|
|
18
|
+
afterEach(async function() {
|
|
19
|
+
await models.DroneConnection.deleteMany({});
|
|
20
|
+
await mongoose.disconnect();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("is saved and reads back every field", async function() {
|
|
24
|
+
const sut = await new models.DroneConnection({
|
|
25
|
+
departmentId,
|
|
26
|
+
provider: "skydio",
|
|
27
|
+
active: true,
|
|
28
|
+
label: "Skydio HQ",
|
|
29
|
+
authToken: { iv: "iv-token", encryptedData: "enc-token" },
|
|
30
|
+
authSecret: { iv: "iv-secret", encryptedData: "enc-secret" },
|
|
31
|
+
options: {
|
|
32
|
+
drones: "listed",
|
|
33
|
+
serials: ["SN-1", "SN-2"],
|
|
34
|
+
},
|
|
35
|
+
}).save();
|
|
36
|
+
|
|
37
|
+
assert.isNotNull(sut._id);
|
|
38
|
+
assert.equal(sut.departmentId.toString(), departmentId.toString());
|
|
39
|
+
assert.equal(sut.provider, "skydio");
|
|
40
|
+
assert.isTrue(sut.active);
|
|
41
|
+
assert.equal(sut.label, "Skydio HQ");
|
|
42
|
+
assert.equal(sut.authToken.iv, "iv-token");
|
|
43
|
+
assert.equal(sut.authToken.encryptedData, "enc-token");
|
|
44
|
+
assert.equal(sut.authSecret.iv, "iv-secret");
|
|
45
|
+
assert.equal(sut.authSecret.encryptedData, "enc-secret");
|
|
46
|
+
assert.equal(sut.options?.drones, "listed");
|
|
47
|
+
assert.deepEqual(sut.options?.serials, ["SN-1", "SN-2"]);
|
|
48
|
+
assert.instanceOf(sut.modified, Date);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("leaves options undefined when none are given", async function() {
|
|
52
|
+
const sut = await new models.DroneConnection({
|
|
53
|
+
departmentId,
|
|
54
|
+
provider: "skydio",
|
|
55
|
+
label: "No options",
|
|
56
|
+
authToken: { iv: "iv", encryptedData: "t" },
|
|
57
|
+
authSecret: { iv: "iv", encryptedData: "s" },
|
|
58
|
+
}).save();
|
|
59
|
+
|
|
60
|
+
assert.isUndefined(sut.options);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("rejects an unknown provider", async function() {
|
|
64
|
+
let thrownError: unknown = null;
|
|
65
|
+
try {
|
|
66
|
+
await new models.DroneConnection({
|
|
67
|
+
departmentId,
|
|
68
|
+
provider: "bogus",
|
|
69
|
+
label: "Bad provider",
|
|
70
|
+
}).save();
|
|
71
|
+
} catch (e) {
|
|
72
|
+
thrownError = e;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
assert.isNotNull(thrownError, "expected an unknown provider to be rejected");
|
|
76
|
+
assert.include(String((thrownError as Error).message), "provider");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("rejects an unknown options.drones value", async function() {
|
|
80
|
+
let thrownError: unknown = null;
|
|
81
|
+
try {
|
|
82
|
+
await new models.DroneConnection({
|
|
83
|
+
departmentId,
|
|
84
|
+
provider: "skydio",
|
|
85
|
+
label: "Bad options",
|
|
86
|
+
options: {
|
|
87
|
+
drones: "list",
|
|
88
|
+
serials: [],
|
|
89
|
+
},
|
|
90
|
+
}).save();
|
|
91
|
+
} catch (e) {
|
|
92
|
+
thrownError = e;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
assert.isNotNull(thrownError, "expected an unknown options.drones value to be rejected");
|
|
96
|
+
assert.include(String((thrownError as Error).message), "options.drones");
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("stores no timestamp field outside the schema", async function() {
|
|
100
|
+
await new models.DroneConnection({
|
|
101
|
+
departmentId,
|
|
102
|
+
provider: "skydio",
|
|
103
|
+
label: "Raw read",
|
|
104
|
+
}).save();
|
|
105
|
+
|
|
106
|
+
const raw = await models.DroneConnection.collection.findOne({ departmentId });
|
|
107
|
+
assert.isNotNull(raw);
|
|
108
|
+
assert.notProperty(raw, "createdAt");
|
|
109
|
+
assert.notProperty(raw, "updatedAt");
|
|
110
|
+
assert.property(raw, "modified");
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it("advances modified on findOneAndUpdate", async function() {
|
|
114
|
+
const staleDate = new Date("2020-01-02T03:04:05.000Z");
|
|
115
|
+
await new models.DroneConnection({
|
|
116
|
+
departmentId,
|
|
117
|
+
provider: "skydio",
|
|
118
|
+
label: "Stale",
|
|
119
|
+
}).save();
|
|
120
|
+
await models.DroneConnection.collection.updateOne({
|
|
121
|
+
departmentId,
|
|
122
|
+
}, {
|
|
123
|
+
$set: {
|
|
124
|
+
modified: staleDate,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const updated = await models.DroneConnection.findOneAndUpdate({
|
|
129
|
+
departmentId,
|
|
130
|
+
}, {
|
|
131
|
+
$set: {
|
|
132
|
+
active: true,
|
|
133
|
+
},
|
|
134
|
+
}, {
|
|
135
|
+
new: true,
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
assert.isNotNull(updated);
|
|
139
|
+
assert.isTrue(updated!.modified > staleDate, "expected modified to advance");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("enforces a unique (departmentId, provider, label) index", async function() {
|
|
143
|
+
await new models.DroneConnection({
|
|
144
|
+
departmentId,
|
|
145
|
+
provider: "skydio",
|
|
146
|
+
label: "Skydio HQ",
|
|
147
|
+
}).save();
|
|
148
|
+
|
|
149
|
+
let thrownError: unknown = null;
|
|
150
|
+
try {
|
|
151
|
+
await new models.DroneConnection({
|
|
152
|
+
departmentId,
|
|
153
|
+
provider: "skydio",
|
|
154
|
+
label: "Skydio HQ",
|
|
155
|
+
}).save();
|
|
156
|
+
} catch (e) {
|
|
157
|
+
thrownError = e;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
assert.isNotNull(thrownError, "expected a duplicate (departmentId, label) to be rejected");
|
|
161
|
+
assert.equal((thrownError as { code?: number }).code, 11000);
|
|
162
|
+
assert.include(String((thrownError as Error).message), "E11000");
|
|
163
|
+
});
|
|
164
|
+
});
|
package/src/test/user.ts
CHANGED
|
@@ -51,4 +51,15 @@ describe("User", function () {
|
|
|
51
51
|
assert.equal(item.restrictedCommentsEnabled, true);
|
|
52
52
|
assert.isTrue(sut.canBlockIncidents);
|
|
53
53
|
});
|
|
54
|
+
|
|
55
|
+
it("saves and retrieves visibleSources", async function () {
|
|
56
|
+
const item = new models.User({
|
|
57
|
+
...testItem,
|
|
58
|
+
stealthStatus: m.UserStealthStatus.Hidden,
|
|
59
|
+
visibleSources: [m.LocationSource.VehicleModem, m.LocationSource.TCIOS],
|
|
60
|
+
});
|
|
61
|
+
const sut = await item.save();
|
|
62
|
+
assert.equal(sut.stealthStatus, "hidden");
|
|
63
|
+
assert.deepEqual(sut.visibleSources, [m.LocationSource.VehicleModem, m.LocationSource.TCIOS]);
|
|
64
|
+
});
|
|
54
65
|
});
|
package/src/types/department.ts
CHANGED
|
@@ -155,6 +155,17 @@ export interface Mark43ConfigType {
|
|
|
155
155
|
process: Mark43ProcessConfigType
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
export interface GMRConfigType {
|
|
159
|
+
baseUrl: string,
|
|
160
|
+
authToken: string,
|
|
161
|
+
apiToken: string,
|
|
162
|
+
enabled: boolean,
|
|
163
|
+
unitStatusCodes: UnitStatusCodesConfigType,
|
|
164
|
+
webhookSecret: string,
|
|
165
|
+
agencyId: string,
|
|
166
|
+
radioNamePrefixesToStrip: string[],
|
|
167
|
+
}
|
|
168
|
+
|
|
158
169
|
export interface IntterraFieldsType {
|
|
159
170
|
key: string,
|
|
160
171
|
value: string,
|
|
@@ -348,6 +359,10 @@ export interface DroneSenseConfigurationType {
|
|
|
348
359
|
apiKey: string,
|
|
349
360
|
}
|
|
350
361
|
|
|
362
|
+
export interface DronesConfigurationType {
|
|
363
|
+
enabled: boolean,
|
|
364
|
+
}
|
|
365
|
+
|
|
351
366
|
export interface FireMapperConfigurationType {
|
|
352
367
|
enabled: boolean,
|
|
353
368
|
auth: FireMapperAuthV2Type,
|
|
@@ -672,6 +687,7 @@ export interface DepartmentType {
|
|
|
672
687
|
managedIncidentMode: ManagedIncidentMode,
|
|
673
688
|
managedIncidentPriority: ManagedIncidentPriority,
|
|
674
689
|
mark43: Mark43ConfigType,
|
|
690
|
+
gmr: GMRConfigType,
|
|
675
691
|
minPasswordLength: number,
|
|
676
692
|
modified_unix_date: number,
|
|
677
693
|
modified: Date,
|
|
@@ -695,6 +711,7 @@ export interface DepartmentType {
|
|
|
695
711
|
usft: USFTConfigurationType,
|
|
696
712
|
onestep: OneStepConfigurationType, // cspell:disable-line
|
|
697
713
|
dronesense: DroneSenseConfigurationType,
|
|
714
|
+
drones: DronesConfigurationType,
|
|
698
715
|
selfAssignmentEnabled: boolean,
|
|
699
716
|
shareAVL: AccountConfigurationShareAVL,
|
|
700
717
|
shareIncident: AccountConfigurationShareIncident,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Types } from "mongoose";
|
|
2
|
+
import { DroneProvider } from "../constants";
|
|
3
|
+
import { EncryptedDataType } from "./common";
|
|
4
|
+
|
|
5
|
+
export interface DroneConnectionOptionsType {
|
|
6
|
+
drones: "all" | "listed",
|
|
7
|
+
serials: string[],
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface DroneConnectionType {
|
|
11
|
+
// The stable id the video gateway diffs on.
|
|
12
|
+
_id: Types.ObjectId,
|
|
13
|
+
departmentId: Types.ObjectId,
|
|
14
|
+
provider: DroneProvider,
|
|
15
|
+
active: boolean,
|
|
16
|
+
label: string,
|
|
17
|
+
authToken: EncryptedDataType, // Skydio token id
|
|
18
|
+
authSecret: EncryptedDataType, // Skydio token secret
|
|
19
|
+
options?: DroneConnectionOptionsType, // omitted means every drone on the account
|
|
20
|
+
modified: Date,
|
|
21
|
+
}
|
package/src/types/user.ts
CHANGED
|
@@ -139,6 +139,7 @@ export interface UserType {
|
|
|
139
139
|
shareWith3rdPartiesEnabled: boolean,
|
|
140
140
|
socketIO: PubNubTokenSchemaType,
|
|
141
141
|
stealthStatus: string, // UserStealthStatus
|
|
142
|
+
visibleSources: string[],
|
|
142
143
|
superuser: boolean,
|
|
143
144
|
superUserReadOnly: boolean
|
|
144
145
|
syncLoggingExpireDate: Date,
|