@7365admin1/core 3.79.1-staging.336 → 3.79.1-staging.337

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/dist/index.js CHANGED
@@ -35163,25 +35163,44 @@ function useVehicleService() {
35163
35163
  }
35164
35164
  return failures;
35165
35165
  }
35166
+ const CAMERA_WRITE_ROUNDS = 3;
35167
+ const CAMERA_WRITE_RETRY_DELAY_MS = 3e3;
35166
35168
  async function writeToCameras(cameras, write, journal, options = {}) {
35167
35169
  const failures = [];
35168
35170
  let recNo = "";
35169
35171
  for (const camera of cameras) {
35170
- try {
35171
- if (options.onlyIfMissing) {
35172
- const { inserted } = await ensurePlateOnCamera(camera, write);
35173
- if (inserted)
35172
+ for (let round = 1; ; round++) {
35173
+ try {
35174
+ if (options.onlyIfMissing || round > 1) {
35175
+ const { inserted } = await ensurePlateOnCamera(camera, write);
35176
+ if (inserted)
35177
+ journal.inserted(camera, write.mode, write.plateNumber);
35178
+ } else {
35179
+ recNo = await insertPlateOnCamera(camera, write) || recNo;
35174
35180
  journal.inserted(camera, write.mode, write.plateNumber);
35175
- } else {
35176
- recNo = await insertPlateOnCamera(camera, write) || recNo;
35177
- journal.inserted(camera, write.mode, write.plateNumber);
35181
+ }
35182
+ if (round > 1) {
35183
+ import_node_server_utils109.logger.info(
35184
+ `[${cameraLabel(camera)}] write ${write.mode} went through on round ${round}`
35185
+ );
35186
+ }
35187
+ break;
35188
+ } catch (error) {
35189
+ const transient = classifyDahuaFailure(error?.message ?? error) === "transient";
35190
+ if (transient && round < CAMERA_WRITE_ROUNDS) {
35191
+ logCameraFailure(`write ${write.mode} (round ${round}, retrying)`, camera, error);
35192
+ await new Promise(
35193
+ (resolve) => setTimeout(resolve, CAMERA_WRITE_RETRY_DELAY_MS * round)
35194
+ );
35195
+ continue;
35196
+ }
35197
+ logCameraFailure(`write ${write.mode}`, camera, error);
35198
+ failures.push({
35199
+ camera: cameraLabel(camera),
35200
+ reason: anprWriteReason(error)
35201
+ });
35202
+ break;
35178
35203
  }
35179
- } catch (error) {
35180
- logCameraFailure(`write ${write.mode}`, camera, error);
35181
- failures.push({
35182
- camera: cameraLabel(camera),
35183
- reason: anprWriteReason(error)
35184
- });
35185
35204
  }
35186
35205
  }
35187
35206
  return { failures, recNo };
@@ -35568,6 +35587,9 @@ function useVehicleService() {
35568
35587
  }
35569
35588
  const _plateNumber = String(vehicle.plateNumber ?? "");
35570
35589
  const owner = vehicle.name;
35590
+ const approveOutcome = ["deleted", "inactive", "rejected"].includes(
35591
+ String(vehicle.status ?? "")
35592
+ ) ? "restored" : "approved";
35571
35593
  const isBlocklist = vehicle.type === "blocklist" /* BLOCKLIST */;
35572
35594
  const mode = listMode(vehicle.type);
35573
35595
  const hasStart = typeof vehicle.start === "string" ? vehicle.start.trim() !== "" : !!vehicle.start;
@@ -35596,7 +35618,7 @@ function useVehicleService() {
35596
35618
  const cameraSite = vehicle.site ?? siteId;
35597
35619
  const siteCameras = isBlocklist ? await blockCamerasAt(cameraSite) : await allowCamerasAt(cameraSite);
35598
35620
  if (!siteCameras.length) {
35599
- throw new import_node_server_utils109.BadRequestError(anprNoCameraRefusal("approved"));
35621
+ throw new import_node_server_utils109.BadRequestError(anprNoCameraRefusal(approveOutcome));
35600
35622
  }
35601
35623
  const { failures } = await writeToCameras(
35602
35624
  siteCameras,
@@ -35614,7 +35636,7 @@ function useVehicleService() {
35614
35636
  cameraFailureSentence({
35615
35637
  failures,
35616
35638
  operation: "added to",
35617
- outcome: "approved",
35639
+ outcome: approveOutcome,
35618
35640
  consequence: isBlocklist ? "it would still open the barrier" : "it would not open the barrier"
35619
35641
  })
35620
35642
  );
@@ -35725,7 +35747,11 @@ function useVehicleService() {
35725
35747
  const ownEnd = validDate(vehicle.end);
35726
35748
  let startDate;
35727
35749
  let endDate;
35728
- if (ownEnd) {
35750
+ if (isBlocklist) {
35751
+ const block = blockWindow();
35752
+ startDate = new Date(block.start);
35753
+ endDate = new Date(block.end);
35754
+ } else if (ownEnd) {
35729
35755
  if (ownEnd.getTime() <= Date.now()) {
35730
35756
  throw new import_node_server_utils109.BadRequestError(
35731
35757
  `This vehicle's expiry date (${dahuaWallClock(
@@ -40245,6 +40271,10 @@ function useVehicleController() {
40245
40271
  message: "You do not have permission to view vehicles."
40246
40272
  };
40247
40273
  const VEHICLE_DETAILS = {
40274
+ permissions: ["vehicle-mgmt:see-vehicle-details"],
40275
+ message: "You do not have permission to view vehicle details."
40276
+ };
40277
+ const VEHICLE_EDIT_READ = {
40248
40278
  permissions: [
40249
40279
  "vehicle-mgmt:see-vehicle-details",
40250
40280
  "vehicle-mgmt:update-vehicle"
@@ -40651,7 +40681,7 @@ function useVehicleController() {
40651
40681
  }
40652
40682
  const { _id } = value;
40653
40683
  try {
40654
- await requireVehicleReach(req, _id, VEHICLE_DETAILS);
40684
+ await requireVehicleReach(req, _id, VEHICLE_EDIT_READ);
40655
40685
  const site = await _getSpecificVehicleById(_id);
40656
40686
  res.json(site);
40657
40687
  return;