@7365admin1/core 3.52.5-staging.250 → 3.52.5

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/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @iservice365/core
2
2
 
3
+ ## 3.52.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 9bad426: Revoke each expired vehicle's plate only from its own site's cameras, and fail closed
8
+
9
+ The hourly expired-vehicle sweep declared its `siteCameras` array outside the
10
+ per-vehicle loop and only ever pushed to it, so the list grew as the run went
11
+ on: the second vehicle was revoked from its own site's cameras AND from the
12
+ first vehicle's. `recNo` is a per-device sequence number, so those extra calls
13
+ did not simply miss - they addressed whatever record carried that number on the
14
+ other site's camera and took an unrelated, still-valid plate off the barrier.
15
+ Cameras are now resolved per vehicle, cached by site id so each site is still
16
+ paged only once per run.
17
+
18
+ The sweep also marked every expired vehicle deleted with one blanket
19
+ `updateMany`, regardless of what the cameras answered, so a record could read
20
+ "deleted" while its plate still opened the gate. Only vehicles whose every
21
+ camera confirmed are now marked deleted; the rest are left expired, logged at
22
+ error level naming the vehicle, plate, site and camera, and retried on the next
23
+ hourly run. `deleteExpiredVehicles` now requires the list of ids.
24
+
25
+ Also: each camera is asked for its own record id before the removal (the same
26
+ thing manual delete does), the ANPR list is chosen from the vehicle's type
27
+ instead of always TRAFFIC_REDLIST, a site with no ANPR camera no longer aborts
28
+ the whole run, and the transaction that wrapped nothing - the only write was
29
+ issued without the session - has been removed.
30
+
31
+ - 082a865: Fail closed in the visitor ANPR sweep, and remove the dead invitation transaction
32
+
33
+ `processTransactionDahuaStatus`, the hourly job that takes an expired or
34
+ checked-out visitor's plate off the site's ANPR camera, marked the transaction
35
+ `dahuaSyncStatus: "removed"` on the line after the camera call and only skipped
36
+ on a thrown error. `removePlateNumber` does not throw for a device failure - it
37
+ returns an outcome object - so a camera answering 401 or 500, or not answering
38
+ at all, still had the transaction recorded as removed while the visitor's plate
39
+ was still on the barrier. Nothing retried it either, because the query that
40
+ feeds the sweep skips anything already marked removed.
41
+
42
+ It now uses the same decision logic as the expired-vehicle sweep: only a
43
+ transaction every camera confirmed is marked removed, and the rest are logged at
44
+ error level naming the plate, the site and the camera, then retried on the next
45
+ run. Each camera is also asked for its own record id before the removal, which
46
+ is what the old "not found" message sniff was reaching for and what stops a
47
+ transaction whose record is already gone from being retried for ever.
48
+
49
+ `checkExpiredInvitation` opened a session and a transaction and then issued
50
+ every write without that session, never committing: the transaction protected no
51
+ write and the rollback rolled back nothing. Each invitation is independent, so
52
+ there is no invariant spanning them and nothing for a transaction to protect -
53
+ it is removed rather than wired up.
54
+
3
55
  ## 3.52.4
4
56
 
5
57
  ### Patch Changes
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@7365admin1/core",
3
3
  "license": "MIT",
4
- "version": "3.52.5-staging.250",
4
+ "version": "3.52.5",
5
5
  "author": "7365admin1",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",
@@ -1,27 +0,0 @@
1
- ---
2
- "@7365admin1/core": patch
3
- ---
4
-
5
- Revoke each expired vehicle's plate only from its own site's cameras, and fail closed
6
-
7
- The hourly expired-vehicle sweep declared its `siteCameras` array outside the
8
- per-vehicle loop and only ever pushed to it, so the list grew as the run went
9
- on: the second vehicle was revoked from its own site's cameras AND from the
10
- first vehicle's. `recNo` is a per-device sequence number, so those extra calls
11
- did not simply miss - they addressed whatever record carried that number on the
12
- other site's camera and took an unrelated, still-valid plate off the barrier.
13
- Cameras are now resolved per vehicle, cached by site id so each site is still
14
- paged only once per run.
15
-
16
- The sweep also marked every expired vehicle deleted with one blanket
17
- `updateMany`, regardless of what the cameras answered, so a record could read
18
- "deleted" while its plate still opened the gate. Only vehicles whose every
19
- camera confirmed are now marked deleted; the rest are left expired, logged at
20
- error level naming the vehicle, plate, site and camera, and retried on the next
21
- hourly run. `deleteExpiredVehicles` now requires the list of ids.
22
-
23
- Also: each camera is asked for its own record id before the removal (the same
24
- thing manual delete does), the ANPR list is chosen from the vehicle's type
25
- instead of always TRAFFIC_REDLIST, a site with no ANPR camera no longer aborts
26
- the whole run, and the transaction that wrapped nothing - the only write was
27
- issued without the session - has been removed.
@@ -1,27 +0,0 @@
1
- ---
2
- "@7365admin1/core": patch
3
- ---
4
-
5
- Fail closed in the visitor ANPR sweep, and remove the dead invitation transaction
6
-
7
- `processTransactionDahuaStatus`, the hourly job that takes an expired or
8
- checked-out visitor's plate off the site's ANPR camera, marked the transaction
9
- `dahuaSyncStatus: "removed"` on the line after the camera call and only skipped
10
- on a thrown error. `removePlateNumber` does not throw for a device failure - it
11
- returns an outcome object - so a camera answering 401 or 500, or not answering
12
- at all, still had the transaction recorded as removed while the visitor's plate
13
- was still on the barrier. Nothing retried it either, because the query that
14
- feeds the sweep skips anything already marked removed.
15
-
16
- It now uses the same decision logic as the expired-vehicle sweep: only a
17
- transaction every camera confirmed is marked removed, and the rest are logged at
18
- error level naming the plate, the site and the camera, then retried on the next
19
- run. Each camera is also asked for its own record id before the removal, which
20
- is what the old "not found" message sniff was reaching for and what stops a
21
- transaction whose record is already gone from being retried for ever.
22
-
23
- `checkExpiredInvitation` opened a session and a transaction and then issued
24
- every write without that session, never committing: the transaction protected no
25
- write and the rollback rolled back nothing. Each invitation is independent, so
26
- there is no invariant spanning them and nothing for a transaction to protect -
27
- it is removed rather than wired up.