tabletcommand-location 2.4.1 → 2.4.3

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.
Files changed (65) hide show
  1. package/.claude/worktrees/sc-36275/.buildkite/pipeline.yml +5 -0
  2. package/.claude/worktrees/sc-36275/README.md +3 -0
  3. package/.claude/worktrees/sc-36275/build/audience.js +38 -0
  4. package/.claude/worktrees/sc-36275/build/audience.js.map +1 -0
  5. package/.claude/worktrees/sc-36275/build/index.js +95 -0
  6. package/.claude/worktrees/sc-36275/build/index.js.map +1 -0
  7. package/.claude/worktrees/sc-36275/build/location.js +278 -0
  8. package/.claude/worktrees/sc-36275/build/location.js.map +1 -0
  9. package/.claude/worktrees/sc-36275/build/query.js +378 -0
  10. package/.claude/worktrees/sc-36275/build/query.js.map +1 -0
  11. package/.claude/worktrees/sc-36275/build/store.js +182 -0
  12. package/.claude/worktrees/sc-36275/build/store.js.map +1 -0
  13. package/.claude/worktrees/sc-36275/build/test/location.js +522 -0
  14. package/.claude/worktrees/sc-36275/build/test/location.js.map +1 -0
  15. package/.claude/worktrees/sc-36275/build/test/mock.js +165 -0
  16. package/.claude/worktrees/sc-36275/build/test/mock.js.map +1 -0
  17. package/.claude/worktrees/sc-36275/build/test/query.js +174 -0
  18. package/.claude/worktrees/sc-36275/build/test/query.js.map +1 -0
  19. package/.claude/worktrees/sc-36275/build/types.js +8 -0
  20. package/.claude/worktrees/sc-36275/build/types.js.map +1 -0
  21. package/.claude/worktrees/sc-36275/cspell.json +64 -0
  22. package/.claude/worktrees/sc-36275/definitions/audience.d.ts +18 -0
  23. package/.claude/worktrees/sc-36275/definitions/audience.d.ts.map +1 -0
  24. package/.claude/worktrees/sc-36275/definitions/index.d.ts +11 -0
  25. package/.claude/worktrees/sc-36275/definitions/index.d.ts.map +1 -0
  26. package/.claude/worktrees/sc-36275/definitions/location.d.ts +32 -0
  27. package/.claude/worktrees/sc-36275/definitions/location.d.ts.map +1 -0
  28. package/.claude/worktrees/sc-36275/definitions/query.d.ts +36 -0
  29. package/.claude/worktrees/sc-36275/definitions/query.d.ts.map +1 -0
  30. package/.claude/worktrees/sc-36275/definitions/store.d.ts +64 -0
  31. package/.claude/worktrees/sc-36275/definitions/store.d.ts.map +1 -0
  32. package/.claude/worktrees/sc-36275/definitions/test/location.d.ts +2 -0
  33. package/.claude/worktrees/sc-36275/definitions/test/location.d.ts.map +1 -0
  34. package/.claude/worktrees/sc-36275/definitions/test/mock.d.ts +346 -0
  35. package/.claude/worktrees/sc-36275/definitions/test/mock.d.ts.map +1 -0
  36. package/.claude/worktrees/sc-36275/definitions/test/query.d.ts +2 -0
  37. package/.claude/worktrees/sc-36275/definitions/test/query.d.ts.map +1 -0
  38. package/.claude/worktrees/sc-36275/definitions/types.d.ts +53 -0
  39. package/.claude/worktrees/sc-36275/definitions/types.d.ts.map +1 -0
  40. package/.claude/worktrees/sc-36275/eslint.config.mjs +95 -0
  41. package/.claude/worktrees/sc-36275/gulpfile.js +23 -0
  42. package/.claude/worktrees/sc-36275/package-lock.json +9404 -0
  43. package/.claude/worktrees/sc-36275/package.json +54 -0
  44. package/.claude/worktrees/sc-36275/src/audience.ts +54 -0
  45. package/.claude/worktrees/sc-36275/src/index.ts +81 -0
  46. package/.claude/worktrees/sc-36275/src/location.ts +315 -0
  47. package/.claude/worktrees/sc-36275/src/query.ts +497 -0
  48. package/.claude/worktrees/sc-36275/src/store.ts +204 -0
  49. package/.claude/worktrees/sc-36275/src/test/location.ts +485 -0
  50. package/.claude/worktrees/sc-36275/src/test/mock.ts +186 -0
  51. package/.claude/worktrees/sc-36275/src/test/query.ts +209 -0
  52. package/.claude/worktrees/sc-36275/src/tsconfig.json +30 -0
  53. package/.claude/worktrees/sc-36275/src/types.ts +74 -0
  54. package/.claude/worktrees/sc-36275/test.sh +32 -0
  55. package/build/query.js +6 -1
  56. package/build/query.js.map +1 -1
  57. package/build/test/query.js +2 -2
  58. package/build/test/query.js.map +1 -1
  59. package/cspell.json +1 -0
  60. package/definitions/query.d.ts.map +1 -1
  61. package/definitions/test/mock.d.ts +5 -0
  62. package/definitions/test/mock.d.ts.map +1 -1
  63. package/package.json +7 -7
  64. package/src/query.ts +6 -1
  65. package/src/test/query.ts +2 -2
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ const tabletcommand_backend_models_1 = require("tabletcommand-backend-models");
5
+ function default_1(modelsModule) {
6
+ const departmentId = "5195426cc4e016a988000969";
7
+ const agencyId = "5f07b93bfb41951409d58493";
8
+ const apiKey = "secretApiKey1990";
9
+ const d = {
10
+ _id: (0, tabletcommand_backend_models_1.convertToObjectId)(departmentId),
11
+ department: "Test Department",
12
+ accountType: "production",
13
+ industry: tabletcommand_backend_models_1.AccountIndustry.Utility,
14
+ shareAVL: {
15
+ enabled: true,
16
+ opAreaName: "Test Area",
17
+ opAreaCode: "TEST",
18
+ fadeZoomLevel: 45000,
19
+ area: {
20
+ type: "Polygon",
21
+ coordinates: [],
22
+ },
23
+ },
24
+ signupDomains: [],
25
+ signupKey: "abcd",
26
+ incidentTypes: [],
27
+ rtsChannelPrefix: "rtsChannelPrefix123",
28
+ cadGetLocationEnabled: true,
29
+ rtsEnabled: true,
30
+ pushEnabled: true,
31
+ cadBidirectionalEnabled: false,
32
+ cadOneWayVehiclesEnabled: true,
33
+ cadEmailUsername: "",
34
+ apikey: apiKey,
35
+ active: true,
36
+ modified_unix_date: 1492743603.514,
37
+ state: "CO",
38
+ city: "Denver",
39
+ fdid: "06905",
40
+ uuid: "e4c5873c-1684-47a9-ad2d-81ded6e7ac15",
41
+ modified_date: "2017-04-21T03:00:03.514",
42
+ addressDetails: {
43
+ address: "123 Delta Way",
44
+ city: "Delta Junction",
45
+ state: "CA",
46
+ country: "US",
47
+ zipCode: "99999"
48
+ }
49
+ };
50
+ // cSpell:disable
51
+ const mappedDevice = {
52
+ departmentId,
53
+ remoteFamily: "IPv4",
54
+ uuid: "c01c192f-b71d-4bd6-b5a4-bab6e350a491",
55
+ remoteAddress: "166.140.104.203",
56
+ active: true,
57
+ modified_unix_date: 0,
58
+ deviceId: "BEEDOO3",
59
+ mapId: "BOOPBEEP99",
60
+ deviceType: "geotab",
61
+ userId: "",
62
+ locationToCAD: true,
63
+ mapHidden: false,
64
+ };
65
+ // cSpell:denable
66
+ const agency = {
67
+ _id: (0, tabletcommand_backend_models_1.convertToObjectId)(agencyId),
68
+ active: true,
69
+ code: "OTHER",
70
+ departmentId: (0, tabletcommand_backend_models_1.convertToObjectId)(departmentId),
71
+ name: "Other",
72
+ personnelApiKey: "123",
73
+ crossStaffing: [
74
+ {
75
+ alwaysCrossStaff: true,
76
+ crossStaffedUnits: ["Z1"],
77
+ radioName: "D22"
78
+ },
79
+ {
80
+ alwaysCrossStaff: false,
81
+ crossStaffedUnits: ["M1"],
82
+ radioName: "K12"
83
+ },
84
+ {
85
+ alwaysCrossStaff: true,
86
+ crossStaffedUnits: ["A1", "A2"],
87
+ radioName: "Z12"
88
+ },
89
+ {
90
+ alwaysCrossStaff: false,
91
+ crossStaffedUnits: ["A1", "A2", "D22"],
92
+ radioName: "Z99"
93
+ }
94
+ ]
95
+ };
96
+ async function clearTestData(mods) {
97
+ const query = {};
98
+ await mods.Agency.deleteMany(query);
99
+ await mods.Department.deleteMany(query);
100
+ await mods.Location.deleteMany(query);
101
+ await mods.CADVehicle.deleteMany(query);
102
+ await mods.DeviceMapping.deleteMany(query);
103
+ }
104
+ async function prepareTestData(mods) {
105
+ const testDepartment = new mods.Department(d);
106
+ await testDepartment.save();
107
+ const testItem = new models.Agency(agency);
108
+ await testItem.save();
109
+ const deviceMapped = new models.DeviceMapping(mappedDevice);
110
+ await deviceMapped.save();
111
+ }
112
+ let models;
113
+ let connection;
114
+ async function afterEach() {
115
+ if (!shouldRun()) {
116
+ process.exit(1);
117
+ }
118
+ }
119
+ async function after() {
120
+ await getConnection().connection.close();
121
+ }
122
+ async function before() {
123
+ if (!shouldRun()) {
124
+ process.exit(1);
125
+ }
126
+ const { models: lModels, connection: lConnection } = await modelsModule.connect(process.env.NODE_MONGO_URL || "");
127
+ models = lModels;
128
+ connection = lConnection;
129
+ return models;
130
+ }
131
+ async function beforeEach() {
132
+ if (!shouldRun()) {
133
+ process.exit(1);
134
+ }
135
+ await clearTestData(models);
136
+ await prepareTestData(models);
137
+ }
138
+ function shouldRun() {
139
+ const mongoUrl = process.env.NODE_MONGO_URL || "";
140
+ if (!/massive-test/i.exec(mongoUrl)) {
141
+ console.log(`Not a test database: ${mongoUrl}? Expecting database: massive-test.`);
142
+ return false;
143
+ }
144
+ return true;
145
+ }
146
+ function getModels() {
147
+ return models;
148
+ }
149
+ function getConnection() {
150
+ return connection;
151
+ }
152
+ return {
153
+ department: d,
154
+ agency,
155
+ clearTestData,
156
+ prepareTestData,
157
+ before,
158
+ beforeEach,
159
+ after,
160
+ afterEach,
161
+ getModels,
162
+ getConnection,
163
+ };
164
+ }
165
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/test/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const node_test_1 = require("node:test");
5
+ const query_1 = require("../query");
6
+ const departmentId = "5195426cc4e016a988000969";
7
+ const movedAt = new Date("2024-01-01T00:00:00.000Z");
8
+ const modifiedDate = new Date("2024-01-02T00:00:00.000Z");
9
+ const longitude = -119.0669;
10
+ const latitude = 34.35264;
11
+ const diagonal = 5000;
12
+ (0, node_test_1.describe)("query", () => {
13
+ (0, node_test_1.describe)("adminListLocations", () => {
14
+ (0, node_test_1.it)("Scopes to the department, excludes uav and person/transponder-tracked records", () => {
15
+ const { list } = (0, query_1.adminListLocations)({ departmentId, movedAt });
16
+ chai_1.assert.equal(list.active, true);
17
+ chai_1.assert.equal(list.departmentId, departmentId);
18
+ chai_1.assert.deepEqual(list.kindType, { $ne: "uav" });
19
+ });
20
+ (0, node_test_1.it)("Drops the active filter when showAll is true", () => {
21
+ const { list } = (0, query_1.adminListLocations)({ departmentId, movedAt, showAll: true });
22
+ chai_1.assert.isUndefined(list.active);
23
+ });
24
+ (0, node_test_1.it)("Keeps the active filter when showAll is not set", () => {
25
+ const { list } = (0, query_1.adminListLocations)({ departmentId, movedAt });
26
+ chai_1.assert.property(list, "active");
27
+ });
28
+ });
29
+ (0, node_test_1.describe)("adminListPersonLocations", () => {
30
+ (0, node_test_1.it)("Scopes to the department and person kindType", () => {
31
+ const { list } = (0, query_1.adminListPersonLocations)({ departmentId, movedAt });
32
+ chai_1.assert.equal(list.active, true);
33
+ chai_1.assert.equal(list.departmentId, departmentId);
34
+ chai_1.assert.equal(list.kindType, "person");
35
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt });
36
+ });
37
+ (0, node_test_1.it)("Drops the active filter when showAll is true", () => {
38
+ const { list } = (0, query_1.adminListPersonLocations)({ departmentId, movedAt, showAll: true });
39
+ chai_1.assert.isUndefined(list.active);
40
+ });
41
+ });
42
+ (0, node_test_1.describe)("adminListUAVLocations", () => {
43
+ (0, node_test_1.it)("Scopes to the department and uav kindType", () => {
44
+ const { list } = (0, query_1.adminListUAVLocations)({ departmentId, movedAt });
45
+ chai_1.assert.equal(list.active, true);
46
+ chai_1.assert.equal(list.departmentId, departmentId);
47
+ chai_1.assert.equal(list.kindType, "uav");
48
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt });
49
+ });
50
+ (0, node_test_1.it)("Drops the active filter when showAll is true", () => {
51
+ const { list } = (0, query_1.adminListUAVLocations)({ departmentId, movedAt, showAll: true });
52
+ chai_1.assert.isUndefined(list.active);
53
+ });
54
+ });
55
+ (0, node_test_1.describe)("adminListAircraftLocations", () => {
56
+ (0, node_test_1.it)("Excludes the caller's department and matches shared ADSB aircraft", () => {
57
+ const { list } = (0, query_1.adminListAircraftLocations)({ departmentId, movedAt, longitude, latitude, diagonal });
58
+ chai_1.assert.equal(list.shared, true);
59
+ chai_1.assert.equal(list.active, true);
60
+ chai_1.assert.equal(list.source, "ADSB");
61
+ chai_1.assert.deepEqual(list.kindType, { $in: ["fixed-wing", "helicopter"] });
62
+ chai_1.assert.deepEqual(list.departmentId, { $ne: departmentId });
63
+ });
64
+ (0, node_test_1.it)("Sends movedAt as an ISO string", () => {
65
+ const { list } = (0, query_1.adminListAircraftLocations)({ departmentId, movedAt, longitude, latitude, diagonal });
66
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt.toISOString() });
67
+ });
68
+ (0, node_test_1.it)("Builds a $centerSphere filter as [longitude, latitude] with the diagonal converted to radians", () => {
69
+ const { list } = (0, query_1.adminListAircraftLocations)({ departmentId, movedAt, longitude, latitude, diagonal });
70
+ chai_1.assert.deepEqual(list.locationGeoJSON.$geoWithin.$centerSphere, [
71
+ [longitude, latitude],
72
+ diagonal / query_1.metersToRadians,
73
+ ]);
74
+ });
75
+ });
76
+ (0, node_test_1.describe)("adminListSharedLocations", () => {
77
+ (0, node_test_1.it)("Excludes the caller's department, ADSB source, and uav kindType", () => {
78
+ const { list } = (0, query_1.adminListSharedLocations)({ departmentId, movedAt, longitude, latitude, diagonal });
79
+ chai_1.assert.equal(list.shared, true);
80
+ chai_1.assert.equal(list.active, true);
81
+ chai_1.assert.deepEqual(list.source, { $ne: "ADSB" });
82
+ chai_1.assert.deepEqual(list.kindType, { $ne: "uav" });
83
+ chai_1.assert.deepEqual(list.departmentId, { $ne: departmentId });
84
+ });
85
+ });
86
+ (0, node_test_1.describe)("adminListFocusedLocations", () => {
87
+ (0, node_test_1.it)("Scopes to the caller's department with a geo filter", () => {
88
+ const { list } = (0, query_1.adminListFocusedLocations)({ departmentId, movedAt, longitude, latitude, diagonal });
89
+ chai_1.assert.equal(list.active, true);
90
+ chai_1.assert.equal(list.departmentId, departmentId);
91
+ chai_1.assert.property(list, "locationGeoJSON");
92
+ });
93
+ (0, node_test_1.it)("Drops the geo filter (not active) when showAll is true", () => {
94
+ const { list } = (0, query_1.adminListFocusedLocations)({ departmentId, movedAt, longitude, latitude, diagonal, showAll: true });
95
+ chai_1.assert.isUndefined(list.locationGeoJSON);
96
+ chai_1.assert.equal(list.active, true);
97
+ });
98
+ });
99
+ (0, node_test_1.describe)("syncListSharedLocations", () => {
100
+ (0, node_test_1.it)("Excludes the caller's department and ADSB/DroneSense/Skydio sources", () => {
101
+ const { list } = (0, query_1.syncListSharedLocations)({ departmentId, movedAt, modifiedDate, longitude, latitude, diagonal });
102
+ chai_1.assert.equal(list.shared, true);
103
+ chai_1.assert.deepEqual(list.source, { $nin: ["ADSB", "DroneSense", "Skydio"] });
104
+ chai_1.assert.deepEqual(list.departmentId, { $ne: departmentId });
105
+ chai_1.assert.deepEqual(list.modified, { $gte: modifiedDate.toISOString() });
106
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt.toISOString() });
107
+ });
108
+ });
109
+ (0, node_test_1.describe)("syncListLocations", () => {
110
+ (0, node_test_1.it)("Scopes to the department, excludes uav and person/transponder-tracked records", () => {
111
+ const { list } = (0, query_1.syncListLocations)({ departmentId, movedAt, modifiedDate });
112
+ chai_1.assert.equal(list.departmentId, departmentId);
113
+ chai_1.assert.deepEqual(list.kindType, { $ne: "uav" });
114
+ chai_1.assert.deepEqual(list.modified, { $gte: modifiedDate.toISOString() });
115
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt.toISOString() });
116
+ chai_1.assert.deepEqual(list.$and, [
117
+ { $or: [{ personnelUUID: "" }, { personnelUUID: { $exists: false } }] },
118
+ { $or: [{ transponderUUID: "" }, { transponderUUID: { $exists: false } }] },
119
+ ]);
120
+ });
121
+ });
122
+ (0, node_test_1.describe)("syncListPersonLocations", () => {
123
+ (0, node_test_1.it)("Scopes to the department and person kindType", () => {
124
+ const { list } = (0, query_1.syncListPersonLocations)({ departmentId, movedAt, modifiedDate });
125
+ chai_1.assert.equal(list.departmentId, departmentId);
126
+ chai_1.assert.equal(list.kindType, "person");
127
+ chai_1.assert.deepEqual(list.modified, { $gte: modifiedDate.toISOString() });
128
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt.toISOString() });
129
+ });
130
+ });
131
+ (0, node_test_1.describe)("syncListUAVLocations", () => {
132
+ (0, node_test_1.it)("Scopes to the department and uav kindType", () => {
133
+ const { list } = (0, query_1.syncListUAVLocations)({ departmentId, movedAt, modifiedDate });
134
+ chai_1.assert.equal(list.departmentId, departmentId);
135
+ chai_1.assert.equal(list.kindType, "uav");
136
+ chai_1.assert.deepEqual(list.modified, { $gte: modifiedDate.toISOString() });
137
+ chai_1.assert.deepEqual(list.movedAt, { $gte: movedAt.toISOString() });
138
+ });
139
+ });
140
+ (0, node_test_1.describe)("syncListAircraftLocations", () => {
141
+ const base = { departmentId, movedAt, modifiedDate };
142
+ (0, node_test_1.it)("Matches shared ADSB aircraft, scoped away from the caller's department", () => {
143
+ const { list } = (0, query_1.syncListAircraftLocations)({ ...base, longitude, latitude, diagonal });
144
+ chai_1.assert.equal(list.shared, true);
145
+ chai_1.assert.equal(list.source, "ADSB");
146
+ chai_1.assert.deepEqual(list.kindType, { $in: ["fixed-wing", "helicopter"] });
147
+ chai_1.assert.deepEqual(list.departmentId, { $ne: departmentId });
148
+ });
149
+ (0, node_test_1.it)("Adds a geo filter when given valid, non-zero coordinates", () => {
150
+ const { list } = (0, query_1.syncListAircraftLocations)({ ...base, longitude, latitude, diagonal });
151
+ chai_1.assert.deepEqual(list.locationGeoJSON.$geoWithin.$centerSphere, [
152
+ [longitude, latitude],
153
+ diagonal / query_1.metersToRadians,
154
+ ]);
155
+ });
156
+ (0, node_test_1.it)("Omits the geo filter when coordinates are at the origin", () => {
157
+ const { list } = (0, query_1.syncListAircraftLocations)({ ...base, longitude: 0, latitude: 0, diagonal });
158
+ chai_1.assert.isUndefined(list.locationGeoJSON);
159
+ });
160
+ (0, node_test_1.it)("Omits the geo filter when coordinates are within the origin (<= 0.01)", () => {
161
+ const { list } = (0, query_1.syncListAircraftLocations)({ ...base, longitude: 0.01, latitude: 0.01, diagonal });
162
+ chai_1.assert.isUndefined(list.locationGeoJSON);
163
+ });
164
+ (0, node_test_1.it)("Omits the geo filter when latitude is out of range", () => {
165
+ const { list } = (0, query_1.syncListAircraftLocations)({ ...base, longitude, latitude: 90, diagonal });
166
+ chai_1.assert.isUndefined(list.locationGeoJSON);
167
+ });
168
+ (0, node_test_1.it)("Omits the geo filter when longitude is out of range", () => {
169
+ const { list } = (0, query_1.syncListAircraftLocations)({ ...base, longitude: 180, latitude, diagonal });
170
+ chai_1.assert.isUndefined(list.locationGeoJSON);
171
+ });
172
+ });
173
+ });
174
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/test/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocationVisibility = exports.LocationSource = exports.LocationKindType = void 0;
4
+ const tabletcommand_backend_models_1 = require("tabletcommand-backend-models");
5
+ Object.defineProperty(exports, "LocationKindType", { enumerable: true, get: function () { return tabletcommand_backend_models_1.LocationKindType; } });
6
+ Object.defineProperty(exports, "LocationSource", { enumerable: true, get: function () { return tabletcommand_backend_models_1.LocationSource; } });
7
+ Object.defineProperty(exports, "LocationVisibility", { enumerable: true, get: function () { return tabletcommand_backend_models_1.LocationVisibility; } });
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA,+EAKsC;AAGpC,iGANA,+CAAgB,OAMA;AAChB,+FANA,6CAAc,OAMA;AACd,mGANA,iDAAkB,OAMA"}
@@ -0,0 +1,64 @@
1
+ // cSpell Settings
2
+ {
3
+ "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json",
4
+ "version": "0.2",
5
+ // language - current active spelling language
6
+ "language": "en-US",
7
+ // words - list of words to be always considered correct
8
+ "words": [
9
+ "accesslog",
10
+ "ADSB",
11
+ "agencyapi",
12
+ "agencypersonnelapi",
13
+ "apikey",
14
+ "backend",
15
+ "bamse",
16
+ "BEEDOO",
17
+ "BOOPBEEP",
18
+ "devops",
19
+ "dmon",
20
+ "expireat",
21
+ "fdid",
22
+ "flushall",
23
+ "geotab",
24
+ "helloworld",
25
+ "hgetall",
26
+ "hincrby",
27
+ "mget",
28
+ "mockgoose",
29
+ "myhash",
30
+ "personnelapi",
31
+ "personnelapikey",
32
+ "signup",
33
+ "signupkey",
34
+ "Skydio",
35
+ "Somewear",
36
+ "stacktraces",
37
+ "tabletcommand",
38
+ "TXRX",
39
+ "tyrion",
40
+ "unixtime",
41
+ "Ursache",
42
+ "virtuals",
43
+ "zonehaven"
44
+ ],
45
+ // flagWords - list of words to be always considered incorrect
46
+ // This is useful for offensive words and common spelling errors.
47
+ // For example "hte" should be "the"
48
+ "flagWords": [
49
+ "hte"
50
+ ],
51
+ "ignoreWords": [],
52
+ "languageSettings": [{
53
+ "languageId": "*",
54
+ "dictionaries": []
55
+ }],
56
+ "ignorePaths": [
57
+ "node_modules",
58
+ "src/**/*.svg",
59
+ "/project-words.txt"
60
+ ],
61
+ "files": [
62
+ "src/**"
63
+ ]
64
+ }
@@ -0,0 +1,18 @@
1
+ import { AccountIndustry } from "tabletcommand-backend-models";
2
+ export type AvlAudienceKind = "always" | "near" | "geo";
3
+ export interface AvlNearArea {
4
+ /** Radius around an anchor incident. Per-pair — deliberately not a shared constant. */
5
+ radiusMeters: number;
6
+ }
7
+ export type AvlAudienceEntry = {
8
+ kind: "always";
9
+ } | {
10
+ kind: "near";
11
+ area: AvlNearArea;
12
+ } | {
13
+ kind: "geo";
14
+ };
15
+ /** owner industry -> reader industry -> entry, or null for denied. Every pair present. */
16
+ export type AvlAudienceMatrix = Record<AccountIndustry, Record<AccountIndustry, AvlAudienceEntry | null>>;
17
+ export declare const AVL_AUDIENCE_MATRIX: AvlAudienceMatrix;
18
+ //# sourceMappingURL=audience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.d.ts","sourceRoot":"","sources":["../src/audience.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,uFAAuF;IACvF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpB,0FAA0F;AAC1F,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC;AAQ1G,eAAO,MAAM,mBAAmB,EAAE,iBA0BjC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { DepartmentModel, LocationModel, CADVehicleModel, DeviceMappingModel, Department } from "tabletcommand-backend-models";
2
+ import { LocationKindType, LocationPayload, LocationSource, LocationVisibility } from "./types";
3
+ export { LocationKindType, LocationPayload, LocationSource, LocationVisibility, };
4
+ export * as query from "./query";
5
+ export declare function lib(departmentModel: DepartmentModel, locationModel: LocationModel, cadVehicleModel: CADVehicleModel, deviceMappingModel: DeviceMappingModel): {
6
+ processLocations: (department: Partial<Department>, items: LocationPayload[] | null | undefined) => Promise<void | never[]>;
7
+ processLocationsDeviceMapping: (department: Partial<Department>, items: LocationPayload[] | null | undefined) => Promise<void | never[]>;
8
+ };
9
+ export default lib;
10
+ export type LibModule = ReturnType<typeof lib>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,UAAU,EACX,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,CAAC;AAKF,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,wBAAgB,GAAG,CACjB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB;mCAKM,OAAO,CAAC,UAAU,CAAC,SAAS,eAAe,EAAE,GAAG,IAAI,GAAG,SAAS;gDAiBnD,OAAO,CAAC,UAAU,CAAC,SAAS,eAAe,EAAE,GAAG,IAAI,GAAG,SAAS;EAqB1H;AAED,eAAe,GAAG,CAAC;AACnB,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Department } from "tabletcommand-backend-models";
2
+ import { LocationPayload } from "./types";
3
+ import { StoreModule } from "./store";
4
+ export declare function location(store: StoreModule): {
5
+ processVehicle: (item: LocationPayload, department: Partial<Department>, atDate: Date) => Promise<(import("mongoose").FlattenMaps<{
6
+ _id: import("mongoose").Types.ObjectId;
7
+ uuid: string;
8
+ departmentId: string;
9
+ modifiedDate: number;
10
+ modified: Date;
11
+ vehicleId: string;
12
+ radioName: string;
13
+ station: {
14
+ code: string;
15
+ name: string;
16
+ };
17
+ capability: string;
18
+ mapHidden: boolean;
19
+ locationToCAD: boolean;
20
+ backupDate: Date;
21
+ source: string;
22
+ }> & Required<{
23
+ _id: import("mongoose").Types.ObjectId;
24
+ }> & {
25
+ __v: number;
26
+ }) | null>;
27
+ processItems: (department: Partial<Department>, items: LocationPayload[], atDate: Date) => Promise<void>;
28
+ processItemsDeviceMappingGeotab: (department: Partial<Department>, items: LocationPayload[], atDate: Date) => Promise<void>;
29
+ };
30
+ export default location;
31
+ export type LocationModule = ReturnType<typeof location>;
32
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../src/location.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,EAKX,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,eAAe,EAEhB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW;2BAoJL,eAAe,cAAc,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;+BAmD1D,OAAO,CAAC,UAAU,CAAC,SAAS,eAAe,EAAE,UAAU,IAAI;kDAoCxC,OAAO,CAAC,UAAU,CAAC,SAAS,eAAe,EAAE,UAAU,IAAI;EA4DvH;AAED,eAAe,QAAQ,CAAC;AACxB,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { FilterQuery, ProjectionType, SortOrder } from "mongoose";
2
+ import { Location } from "tabletcommand-backend-models";
3
+ export type MQP = {
4
+ list: FilterQuery<Location>;
5
+ projection: ProjectionType<Location>;
6
+ sortBy?: Record<string, SortOrder>;
7
+ };
8
+ export type AdminListLocationParams1 = {
9
+ departmentId: string;
10
+ movedAt: Date;
11
+ showAll?: boolean;
12
+ };
13
+ export type AdminListLocationParams2 = {
14
+ departmentId: string;
15
+ movedAt: Date;
16
+ longitude: number;
17
+ latitude: number;
18
+ diagonal: number;
19
+ showAll?: boolean;
20
+ };
21
+ export type SyncModifiedDate = {
22
+ modifiedDate: Date;
23
+ };
24
+ export declare const metersToRadians = 6378100;
25
+ export declare function adminListLocations(params: AdminListLocationParams1): MQP;
26
+ export declare function adminListPersonLocations(params: AdminListLocationParams1): MQP;
27
+ export declare function adminListUAVLocations(params: AdminListLocationParams1): MQP;
28
+ export declare function adminListAircraftLocations(params: AdminListLocationParams2): MQP;
29
+ export declare function adminListSharedLocations(params: AdminListLocationParams2): MQP;
30
+ export declare function adminListFocusedLocations(params: AdminListLocationParams2): MQP;
31
+ export declare function syncListSharedLocations(params: AdminListLocationParams2 & SyncModifiedDate): MQP;
32
+ export declare function syncListLocations(params: AdminListLocationParams1 & SyncModifiedDate): MQP;
33
+ export declare function syncListPersonLocations(params: AdminListLocationParams1 & SyncModifiedDate): MQP;
34
+ export declare function syncListAircraftLocations(params: AdminListLocationParams2 & SyncModifiedDate): MQP;
35
+ export declare function syncListUAVLocations(params: AdminListLocationParams1 & SyncModifiedDate): MQP;
36
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,QAAQ,EACT,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,IAAI,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,UAAU,CAAC;AAkDvC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CA4BxE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CA6C9E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CAiD3E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CA6BhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CA+B9E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CA2B/E;AA4CD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,GAAG,CA+BhG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,GAAG,CAyB1F;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,GAAG,CAsBhG;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,GAAG,CAuClG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,wBAAwB,GAAG,gBAAgB,GAAG,GAAG,CAuB7F"}
@@ -0,0 +1,64 @@
1
+ import { DepartmentModel, Location, LocationModel, CADVehicleModel, CADVehicle, DeviceMappingModel } from "tabletcommand-backend-models";
2
+ import { LocationPayload } from "./types";
3
+ export declare function store(departmentModel: DepartmentModel, locationModel: LocationModel, cadVehicleModel: CADVehicleModel, deviceMappingModel: DeviceMappingModel): {
4
+ getVehicle: (item: LocationPayload, departmentId: string) => Promise<(import("mongoose").FlattenMaps<{
5
+ _id: import("mongoose").Types.ObjectId;
6
+ uuid: string;
7
+ departmentId: string;
8
+ modifiedDate: number;
9
+ modified: Date;
10
+ vehicleId: string;
11
+ radioName: string;
12
+ station: {
13
+ code: string;
14
+ name: string;
15
+ };
16
+ capability: string;
17
+ mapHidden: boolean;
18
+ locationToCAD: boolean;
19
+ backupDate: Date;
20
+ source: string;
21
+ }> & Required<{
22
+ _id: import("mongoose").Types.ObjectId;
23
+ }> & {
24
+ __v: number;
25
+ }) | null>;
26
+ getDeviceMappingGeotab: (item: LocationPayload, departmentId: string) => Promise<(import("mongoose").FlattenMaps<{
27
+ _id: import("mongoose").Types.ObjectId;
28
+ departmentId: string;
29
+ userId: string;
30
+ deviceType: string;
31
+ mapId: string;
32
+ deviceId: string;
33
+ location: {
34
+ longitude: number;
35
+ latitude: number;
36
+ };
37
+ modified_unix_date: number;
38
+ modified: Date;
39
+ active: boolean;
40
+ remoteAddress: string;
41
+ uuid: string;
42
+ note: string;
43
+ mapHidden: boolean;
44
+ locationToCAD: boolean;
45
+ cadToCAD: {
46
+ activeTransfer: boolean;
47
+ homeDepartmentId: string;
48
+ transferDate: Date;
49
+ };
50
+ }> & Required<{
51
+ _id: import("mongoose").Types.ObjectId;
52
+ }> & {
53
+ __v: number;
54
+ }) | null>;
55
+ updateVehicle: (item: Partial<CADVehicle>, departmentId: string) => Promise<(import("mongoose").Document<unknown, {}, CADVehicle, {}, {}> & CADVehicle & Required<{
56
+ _id: import("mongoose").Types.ObjectId;
57
+ }> & {
58
+ __v: number;
59
+ }) | null>;
60
+ updateLocation: (item: Partial<Location>, atDate: Date) => Promise<void>;
61
+ };
62
+ export default store;
63
+ export type StoreModule = ReturnType<typeof store>;
64
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,QAAQ,EAER,aAAa,EACb,eAAe,EACf,UAAU,EACV,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1D,wBAAgB,KAAK,CACnB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB;uBAIN,eAAe,gBAAgB,MAAM;;;;;;;;;;;;;;;;;;;;;;mCAQzB,eAAe,gBAAgB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAS9C,OAAO,CAAC,UAAU,CAAC,gBAAgB,MAAM;;;;;2BAiBxC,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI;EAkJpE;AACD,eAAe,KAAK,CAAC;AACrB,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/test/location.ts"],"names":[],"mappings":""}