@7365admin1/core 3.32.2-staging.61 → 3.32.2-staging.62
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/.changeset/camera-functions-for-patrol.md +42 -0
- package/dist/index.d.ts +428 -1
- package/dist/index.js +6480 -5861
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6249 -5660
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
- package/test/camera-view.util.test.mjs +334 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
"@7365admin1/core": minor
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Camera functions for Virtual Patrol, proxied server-side.
|
|
6
|
+
|
|
7
|
+
Adds authenticated camera endpoints so the apps can use a site camera without ever
|
|
8
|
+
holding its credential. Dahua devices authenticate with digest and the cleartext
|
|
9
|
+
password on every request (HTTP API V3.37 §3.4) and the specification offers no
|
|
10
|
+
session or usable token, so the only safe shape is a server-side proxy.
|
|
11
|
+
|
|
12
|
+
- `useCameraViewController` — snapshot, snapshot-to-file for evidence, and
|
|
13
|
+
per-recorder health.
|
|
14
|
+
- A camera record does not hold a device address: `site.cameras.host` is the CCTV
|
|
15
|
+
relay's page URL and its numeric last path segment is the stream channel. A
|
|
16
|
+
camera is therefore resolved as **recorder (from `CAMERA_RTSP_DEVICES`, keyed by
|
|
17
|
+
relay authority) + channel (from the stored host)**. The address and credential
|
|
18
|
+
live in deployment configuration only — never in the database, never in a client.
|
|
19
|
+
- Pictures come off the video stream (one `ffmpeg` frame per snapshot, substream
|
|
20
|
+
for a tile, main stream for an evidence capture). The recorder in use exposes
|
|
21
|
+
RTSP only; its HTTP CGI ports are not reachable, so `snapshot.cgi`, firmware
|
|
22
|
+
(§4.6.14), device clock (§4.6.2) and PTZ (§8.1.5) cannot be used against it.
|
|
23
|
+
Firmware and clock are reported as unavailable with a reason, and PTZ refuses.
|
|
24
|
+
`GET /site-cameras/capabilities` reports `ptz: false` whatever
|
|
25
|
+
`CAMERA_PTZ_ENABLED` says, so a client hides the control rather than drawing a
|
|
26
|
+
pad whose every press fails.
|
|
27
|
+
- A camera whose relay has no configured recorder, or whose address carries no
|
|
28
|
+
channel, is refused up-front with a reason rather than failing as a blank picture.
|
|
29
|
+
- At most `CAMERA_MAX_CONCURRENT_GRABS` (4) pictures are taken at once across the
|
|
30
|
+
process, so the endpoint cannot fill the API host with ffmpeg or overpull the
|
|
31
|
+
recorder; over that, the caller is told the cameras are busy.
|
|
32
|
+
- Access is decided by the caller's site/org membership and their role's
|
|
33
|
+
permissions, never by the camera id in the URL.
|
|
34
|
+
- ANPR units are refused: ANPR belongs to visitor and vehicle management, not to
|
|
35
|
+
Virtual Patrol or CCTV.
|
|
36
|
+
- Camera host, username, password and the RTSP URL are never returned and never
|
|
37
|
+
logged; ffmpeg's stderr is discarded because it echoes the credential.
|
|
38
|
+
- No retry on a camera call: the device locks an account for 1800 s after 3
|
|
39
|
+
failures in 30 s (§4.7.x).
|
|
40
|
+
|
|
41
|
+
Requires `ffmpeg` on the API host (or `CAMERA_FFMPEG_PATH`); where it is absent the
|
|
42
|
+
snapshot endpoints answer with "Video tooling is not available on this server."
|
package/dist/index.d.ts
CHANGED
|
@@ -2585,6 +2585,433 @@ declare function useSiteCameraController(): {
|
|
|
2585
2585
|
deleteById: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
2586
2586
|
};
|
|
2587
2587
|
|
|
2588
|
+
/**
|
|
2589
|
+
* Camera-view rules, as pure functions.
|
|
2590
|
+
*
|
|
2591
|
+
* Everything in this file is decidable without a network, a database or an
|
|
2592
|
+
* Express request, which is the point: the access rules and the Dahua protocol
|
|
2593
|
+
* details below are the parts that must not silently rot, and they are the parts
|
|
2594
|
+
* that are otherwise impossible to test without a camera on a desk.
|
|
2595
|
+
*
|
|
2596
|
+
* Endpoint and page references are to Dahua HTTP API V3.37.
|
|
2597
|
+
*/
|
|
2598
|
+
/** Dahua `site.cameras.type` values. Only `ip` units serve pictures — see below. */
|
|
2599
|
+
declare const CAMERA_TYPE_IP = "ip";
|
|
2600
|
+
declare const CAMERA_TYPE_ANPR = "anpr";
|
|
2601
|
+
/**
|
|
2602
|
+
* The domain rule, and it is a product decision, not a technical workaround
|
|
2603
|
+
* (owner, 2026-08-07): **ANPR is a different estate from Virtual Patrol and
|
|
2604
|
+
* CCTV.** ANPR units belong to visitor management and vehicle management, where
|
|
2605
|
+
* they already work; they are not patrol checkpoints and they are not monitoring
|
|
2606
|
+
* cameras. So Patrol and CCTV see `type: "ip"` cameras and nothing else.
|
|
2607
|
+
*
|
|
2608
|
+
* That is why an ANPR record is REFUSED here rather than carried through as a
|
|
2609
|
+
* special case with a "cannot serve a picture" label: it is not a camera this
|
|
2610
|
+
* feature is allowed to touch at all. Nothing in the visitor or vehicle path
|
|
2611
|
+
* reads this file, so the working ANPR flows are untouched.
|
|
2612
|
+
*
|
|
2613
|
+
* The vendor spec agrees, incidentally — V3.37 §10.4.4 (p.538), verbatim: *"For
|
|
2614
|
+
* intelligent traffic device, it should use this method to take a snapshot. But,
|
|
2615
|
+
* the response is not image data."* — but the reason we refuse is the domain
|
|
2616
|
+
* rule, and it would still hold if a future firmware returned a JPEG.
|
|
2617
|
+
*/
|
|
2618
|
+
declare const CAMERA_NOT_PATROL_OR_CCTV = "This is an ANPR unit. ANPR belongs to visitor and vehicle management; Virtual Patrol and CCTV use IP cameras only.";
|
|
2619
|
+
/**
|
|
2620
|
+
* Is this a camera Virtual Patrol or CCTV may use at all?
|
|
2621
|
+
*
|
|
2622
|
+
* The single gate for every per-camera request, so a new endpoint cannot forget
|
|
2623
|
+
* it — and the reason it is a predicate rather than an inline `!==` is that the
|
|
2624
|
+
* rule now has a name a reviewer can look up.
|
|
2625
|
+
*/
|
|
2626
|
+
declare function isPatrolCctvCamera(camera: {
|
|
2627
|
+
type?: string;
|
|
2628
|
+
} | null): boolean;
|
|
2629
|
+
/**
|
|
2630
|
+
* The same rule as a database filter, for the listing paths.
|
|
2631
|
+
*
|
|
2632
|
+
* A wall that renders ANPR tiles as "unsupported" is still showing a supervisor
|
|
2633
|
+
* cameras from a module they are not looking at. They are excluded by the query,
|
|
2634
|
+
* so they cost neither a tile nor a probe.
|
|
2635
|
+
*/
|
|
2636
|
+
declare const PATROL_CCTV_CAMERA_FILTER: {
|
|
2637
|
+
type: string;
|
|
2638
|
+
};
|
|
2639
|
+
/**
|
|
2640
|
+
* Permission strings that may VIEW a camera.
|
|
2641
|
+
*
|
|
2642
|
+
* Measured, not chosen: these are the catalogued Virtual Patrol read strings, and
|
|
2643
|
+
* their union reaches 25 of 36 security members on staging once wildcards are
|
|
2644
|
+
* counted (the same union the client-side read gate uses). Spelling is verbatim
|
|
2645
|
+
* production spelling — never "corrected".
|
|
2646
|
+
*/
|
|
2647
|
+
declare const CAMERA_VIEW_PERMISSIONS: string[];
|
|
2648
|
+
/**
|
|
2649
|
+
* Permission strings that may MOVE a camera.
|
|
2650
|
+
*
|
|
2651
|
+
* Stricter on purpose: viewing a picture is a read, PTZ turns a motor. Only a
|
|
2652
|
+
* role that may actually start a patrol may steer a camera during one.
|
|
2653
|
+
*/
|
|
2654
|
+
declare const CAMERA_PTZ_PERMISSIONS: string[];
|
|
2655
|
+
/** `*` is the estate's wildcard permission and is honoured everywhere else too. */
|
|
2656
|
+
declare function hasAnyPermission(permissions: unknown, allowed: Array<string>): boolean;
|
|
2657
|
+
/**
|
|
2658
|
+
* May this caller reach this camera?
|
|
2659
|
+
*
|
|
2660
|
+
* The id comes from the URL, so it is an untrusted input and is never the thing
|
|
2661
|
+
* that decides. What decides is the caller's membership: the camera's SITE must
|
|
2662
|
+
* be one they are a member of, or — for a membership recorded at org level, with
|
|
2663
|
+
* no site on it — the camera's site must belong to that org.
|
|
2664
|
+
*
|
|
2665
|
+
* Ids are compared as strings so an ObjectId and its hex form match.
|
|
2666
|
+
*/
|
|
2667
|
+
declare function isCameraEntitled(params: {
|
|
2668
|
+
cameraSite?: unknown;
|
|
2669
|
+
cameraOrg?: unknown;
|
|
2670
|
+
memberships: Array<{
|
|
2671
|
+
siteId?: unknown;
|
|
2672
|
+
org?: unknown;
|
|
2673
|
+
}>;
|
|
2674
|
+
}): boolean;
|
|
2675
|
+
/**
|
|
2676
|
+
* Why this camera cannot serve a picture, or `null` when it can.
|
|
2677
|
+
*
|
|
2678
|
+
* Returned rather than thrown so the caller decides the HTTP status, and so the
|
|
2679
|
+
* whole rule set is one assertion in a test.
|
|
2680
|
+
*/
|
|
2681
|
+
declare function snapshotRefusalReason(camera: {
|
|
2682
|
+
type?: string;
|
|
2683
|
+
status?: string;
|
|
2684
|
+
host?: string;
|
|
2685
|
+
} | null, devices?: Record<string, CameraDevice>): string | null;
|
|
2686
|
+
/**
|
|
2687
|
+
* `site.cameras.host` is stored with or without a scheme depending on who added
|
|
2688
|
+
* the record. Default to `http://` rather than `https://`: 9 of the 17 hosts in
|
|
2689
|
+
* the estate are cleartext today (integration audit R8), and silently upgrading
|
|
2690
|
+
* them would turn a working camera into a TLS error.
|
|
2691
|
+
*
|
|
2692
|
+
* ponytail: no URL library. Trailing-slash trim + scheme default is the whole
|
|
2693
|
+
* job; swap in `new URL()` if hosts ever carry paths or ports we must rewrite.
|
|
2694
|
+
*/
|
|
2695
|
+
declare function cameraBaseUrl(host: string): string;
|
|
2696
|
+
/**
|
|
2697
|
+
* **`site.cameras.host` is not a device address for an `ip` camera.** Measured
|
|
2698
|
+
* across the whole estate, 2026-08-09: every active `ip` record stores the CCTV
|
|
2699
|
+
* relay's *page* URL — `https://<relay-authority>/<channel>` — and the numeric
|
|
2700
|
+
* last path segment is the **stream channel** on the recorder the relay reads.
|
|
2701
|
+
*
|
|
2702
|
+
* So a camera resolves in two parts:
|
|
2703
|
+
*
|
|
2704
|
+
* | Part | Comes from |
|
|
2705
|
+
* |---|---|
|
|
2706
|
+
* | which device | server configuration, keyed by the relay authority |
|
|
2707
|
+
* | which stream on it | the stored host's last path segment |
|
|
2708
|
+
*
|
|
2709
|
+
* The device address and its credential live in deployment configuration and
|
|
2710
|
+
* **never in the database and never in the client** — the same rule as every
|
|
2711
|
+
* other secret in this estate, and the reason this file only ever returns a
|
|
2712
|
+
* resolved device to server-side callers.
|
|
2713
|
+
*/
|
|
2714
|
+
type CameraDevice = {
|
|
2715
|
+
host: string;
|
|
2716
|
+
port: number;
|
|
2717
|
+
username: string;
|
|
2718
|
+
password: string;
|
|
2719
|
+
};
|
|
2720
|
+
/**
|
|
2721
|
+
* `CAMERA_RTSP_DEVICES` — a JSON object keyed by relay authority:
|
|
2722
|
+
*
|
|
2723
|
+
* ```
|
|
2724
|
+
* {"<relay-authority>":{"host":"…","port":554,"username":"…","password":"…"}}
|
|
2725
|
+
* ```
|
|
2726
|
+
*
|
|
2727
|
+
* One variable rather than a per-authority naming scheme, because the estate has
|
|
2728
|
+
* exactly one relay today and an unknown number tomorrow; adding the second one
|
|
2729
|
+
* is a config edit, not a code change. Malformed JSON yields no devices — every
|
|
2730
|
+
* camera then refuses with a reason, which is the correct failure for a
|
|
2731
|
+
* misconfigured server and is far better than a half-parsed device map.
|
|
2732
|
+
*/
|
|
2733
|
+
declare function cameraDevices(env?: Record<string, string | undefined>): Record<string, CameraDevice>;
|
|
2734
|
+
/**
|
|
2735
|
+
* The relay authority and the channel a stored host stands for.
|
|
2736
|
+
*
|
|
2737
|
+
* `null` channel means the host carries no numeric last segment — one record in
|
|
2738
|
+
* the estate is like that, and it is genuinely unresolvable rather than a
|
|
2739
|
+
* defaulted channel 1, which would silently show the wrong camera.
|
|
2740
|
+
*/
|
|
2741
|
+
declare function parseCameraHost(host: string): {
|
|
2742
|
+
authority: string;
|
|
2743
|
+
channel: number | null;
|
|
2744
|
+
} | null;
|
|
2745
|
+
/** The device + channel a camera record stands for, or `null` if it does not. */
|
|
2746
|
+
declare function resolveCamera(host: string | undefined, devices?: Record<string, CameraDevice>): {
|
|
2747
|
+
device: CameraDevice;
|
|
2748
|
+
channel: number;
|
|
2749
|
+
} | null;
|
|
2750
|
+
/**
|
|
2751
|
+
* Why a stored host cannot be resolved to a device, or `null` when it can.
|
|
2752
|
+
*
|
|
2753
|
+
* Three distinct reasons on purpose — a lead reading a tile must be able to tell
|
|
2754
|
+
* "nobody configured this relay" (a deployment fix) from "this record is a
|
|
2755
|
+
* placeholder" (a data fix). The estate has all three today: 12 cameras resolve,
|
|
2756
|
+
* two are `example.com` placeholders and one host carries no channel.
|
|
2757
|
+
*/
|
|
2758
|
+
declare function resolutionRefusalReason(host: string | undefined, devices?: Record<string, CameraDevice>): string | null;
|
|
2759
|
+
/**
|
|
2760
|
+
* The RTSP URL for one channel. **Carries the credential — never log it, never
|
|
2761
|
+
* return it, never put it in an error message.**
|
|
2762
|
+
*
|
|
2763
|
+
* The path is the recorder's own (`/cam/realmonitor`), which is what the CCTV
|
|
2764
|
+
* relay has always used; `subtype=1` is the low-bitrate substream and is what a
|
|
2765
|
+
* wall tile wants, `subtype=0` is the full-resolution main stream and is what an
|
|
2766
|
+
* evidence capture wants.
|
|
2767
|
+
*/
|
|
2768
|
+
declare function rtspUrl(device: CameraDevice, channel: number, subtype?: 0 | 1): string;
|
|
2769
|
+
/**
|
|
2770
|
+
* ffmpeg arguments for "one frame, as JPEG, on stdout".
|
|
2771
|
+
*
|
|
2772
|
+
* Separated from the spawn so the arguments are testable without a camera, and
|
|
2773
|
+
* kept deliberately small: TCP transport (the relay uses it and UDP loses frames
|
|
2774
|
+
* across the internet), a single frame, no audio, and nothing that could write
|
|
2775
|
+
* to the device — RTSP `PLAY` is a read.
|
|
2776
|
+
*/
|
|
2777
|
+
declare function ffmpegFrameArgs(url: string): Array<string>;
|
|
2778
|
+
/**
|
|
2779
|
+
* Measured against the live recorder on 2026-08-10: a substream frame arrives in
|
|
2780
|
+
* 7–9 s (RTSP setup plus the wait for a keyframe), three concurrent pulls showed
|
|
2781
|
+
* no degradation. The old 8 s HTTP budget would have timed out most frames, so
|
|
2782
|
+
* this is a separate, larger budget rather than a reuse of it.
|
|
2783
|
+
*/
|
|
2784
|
+
declare const CAMERA_RTSP_TIMEOUT_MS = 15000;
|
|
2785
|
+
/** `ffmpeg` on PATH by default; overridable where the host keeps it elsewhere. */
|
|
2786
|
+
declare function ffmpegPath(env?: Record<string, string | undefined>): string;
|
|
2787
|
+
/** §4.4.2, p.63 — `type=0` is "from the front end", i.e. the live picture. */
|
|
2788
|
+
declare function snapshotEndpoint(channel?: number): string;
|
|
2789
|
+
/** §4.6.14, p.114 — the cheapest call that completes a full digest handshake. */
|
|
2790
|
+
declare const SOFTWARE_VERSION_ENDPOINT = "/cgi-bin/magicBox.cgi?action=getSoftwareVersion";
|
|
2791
|
+
/** §4.6.2, p.106 — read-only. `setCurrentTime` (§4.6.3) is a write and is not ours. */
|
|
2792
|
+
declare const CURRENT_TIME_ENDPOINT = "/cgi-bin/global.cgi?action=getCurrentTime";
|
|
2793
|
+
/**
|
|
2794
|
+
* PTZ movement codes we are willing to send (§8.1.5, p.297).
|
|
2795
|
+
*
|
|
2796
|
+
* An allow-list, not a pass-through. The full `code` set in §8.1 also covers
|
|
2797
|
+
* presets, tours and patterns — those WRITE device configuration, and this
|
|
2798
|
+
* integration issues no configuration writes to any device.
|
|
2799
|
+
*/
|
|
2800
|
+
declare const PTZ_ALLOWED_CODES: string[];
|
|
2801
|
+
declare const PTZ_ALLOWED_ACTIONS: string[];
|
|
2802
|
+
/**
|
|
2803
|
+
* §8.1.5, p.297. Every value is percent-encoded — the same class of defect
|
|
2804
|
+
* `iservice365-core` #1803 fixed on the plate endpoints, where an unencoded
|
|
2805
|
+
* value silently changed the request the device saw.
|
|
2806
|
+
*/
|
|
2807
|
+
declare function ptzEndpoint(params: {
|
|
2808
|
+
action: string;
|
|
2809
|
+
channel?: number;
|
|
2810
|
+
code: string;
|
|
2811
|
+
speed?: number;
|
|
2812
|
+
}): string;
|
|
2813
|
+
/** §8.1.5 speeds run 1..8. Anything else is coerced, never passed through. */
|
|
2814
|
+
declare function clampPtzSpeed(speed: unknown): number;
|
|
2815
|
+
/** `version=3.140.0000000.0\nBuildDate=...` → `3.140.0000000.0`. */
|
|
2816
|
+
declare function parseSoftwareVersion(body: string): string | null;
|
|
2817
|
+
/** `result=2026-08-09 21:30:00` → the same string. */
|
|
2818
|
+
declare function parseDeviceTime(body: string): string | null;
|
|
2819
|
+
/**
|
|
2820
|
+
* How far the camera's clock is from ours, in seconds.
|
|
2821
|
+
*
|
|
2822
|
+
* The device reports LOCAL time with no offset, and the estate runs on Singapore
|
|
2823
|
+
* time (the product-wide rule), so it is compared against a fixed +8h — never
|
|
2824
|
+
* against the API host's own timezone, which is how the patrol-log day windows
|
|
2825
|
+
* went wrong in the first place.
|
|
2826
|
+
*
|
|
2827
|
+
* `null` when the device did not give a parseable time; a drifted clock and an
|
|
2828
|
+
* unreadable one are different facts and must not collapse into "0".
|
|
2829
|
+
*/
|
|
2830
|
+
declare function clockDriftSeconds(deviceTime: string | null, now: Date): number | null;
|
|
2831
|
+
/**
|
|
2832
|
+
* A camera is "healthy" when it answered at all. Firmware and clock are extra
|
|
2833
|
+
* detail; reachability is the signal the guardhouse actually needs, because
|
|
2834
|
+
* today `site.cameras.status` is OUR field and never the device's.
|
|
2835
|
+
*
|
|
2836
|
+
* A drift beyond a minute is called out separately: ANPR transactions are
|
|
2837
|
+
* timestamped from the device, so a drifted clock puts events in the wrong place
|
|
2838
|
+
* in the timeline and nothing currently notices.
|
|
2839
|
+
*/
|
|
2840
|
+
declare const CLOCK_DRIFT_WARN_SECONDS = 60;
|
|
2841
|
+
declare function cameraHealthSummary(params: {
|
|
2842
|
+
reachable: boolean;
|
|
2843
|
+
driftSeconds: number | null;
|
|
2844
|
+
}): "ok" | "drifted" | "unreachable";
|
|
2845
|
+
/**
|
|
2846
|
+
* Hard ceiling on a proxied picture.
|
|
2847
|
+
*
|
|
2848
|
+
* The device sits on the public internet, so an unbounded read is a way to hang
|
|
2849
|
+
* an API worker. 8 MB clears a 4K JPEG with room to spare and stops well short of
|
|
2850
|
+
* anything that could only be a fault or a hostile response.
|
|
2851
|
+
*
|
|
2852
|
+
* ponytail: checked after the response is buffered, not streamed with a running
|
|
2853
|
+
* counter — the request timeout already bounds how long a body can arrive for.
|
|
2854
|
+
* Move to a streaming counter if a device is ever found that trickles.
|
|
2855
|
+
*/
|
|
2856
|
+
declare const CAMERA_SNAPSHOT_MAX_BYTES: number;
|
|
2857
|
+
/** Short, because this call sits on a guard's screen and a camera may be down. */
|
|
2858
|
+
declare const CAMERA_REQUEST_TIMEOUT_MS = 8000;
|
|
2859
|
+
/**
|
|
2860
|
+
* Server-side snapshot cache, in seconds.
|
|
2861
|
+
*
|
|
2862
|
+
* The single most important number here. V3.37 does not document how many
|
|
2863
|
+
* concurrent pulls a unit tolerates (searched — it is simply absent), so N guards
|
|
2864
|
+
* watching one camera must cost ONE device request, not N.
|
|
2865
|
+
*/
|
|
2866
|
+
declare const CAMERA_SNAPSHOT_CACHE_SECONDS = 2;
|
|
2867
|
+
/**
|
|
2868
|
+
* Fields of a camera record that may cross the wire.
|
|
2869
|
+
*
|
|
2870
|
+
* An allow-list, not a delete-list: `host`, `username` and `password` must never
|
|
2871
|
+
* reach a client or a log, and a future field added to the model must be opted
|
|
2872
|
+
* IN rather than remembered about.
|
|
2873
|
+
*/
|
|
2874
|
+
declare function publicCameraFields(camera: Record<string, any>): {
|
|
2875
|
+
_id: any;
|
|
2876
|
+
name: any;
|
|
2877
|
+
type: any;
|
|
2878
|
+
status: any;
|
|
2879
|
+
guardPost: any;
|
|
2880
|
+
siteName: any;
|
|
2881
|
+
};
|
|
2882
|
+
|
|
2883
|
+
/**
|
|
2884
|
+
* Camera functions for Virtual Patrol, proxied.
|
|
2885
|
+
*
|
|
2886
|
+
* ## Why this exists at all
|
|
2887
|
+
*
|
|
2888
|
+
* Dahua devices authenticate with digest and the cleartext password on EVERY
|
|
2889
|
+
* request (V3.37 §3.4). The specification offers no session, no API key and no
|
|
2890
|
+
* usable token — §4.1.5 mints one and never documents how to redeem it. So there
|
|
2891
|
+
* is no version of this feature in which the phone talks to the camera: the
|
|
2892
|
+
* credential would have to ship with the app.
|
|
2893
|
+
*
|
|
2894
|
+
* Everything here therefore runs server-side. The guard's ordinary session
|
|
2895
|
+
* authenticates them to US; we hold the camera credential and speak digest to the
|
|
2896
|
+
* device. The credential is never returned, never logged, and never appears in an
|
|
2897
|
+
* error message — `publicCameraFields` is an allow-list for exactly that reason.
|
|
2898
|
+
*
|
|
2899
|
+
* ## What is deliberately absent
|
|
2900
|
+
*
|
|
2901
|
+
* **No retry.** A failed camera call fails. The device locks an account for
|
|
2902
|
+
* 1800 s after 3 failures in 30 s (§4.7.x), and a retry loop on a user-facing
|
|
2903
|
+
* screen is precisely the defect `iservice365-core` #1803 fixed on the ANPR
|
|
2904
|
+
* listener. A snapshot that fails costs a guard one blank panel; a lockout costs
|
|
2905
|
+
* a site its ANPR and its barrier for half an hour.
|
|
2906
|
+
*
|
|
2907
|
+
* **No configuration write, no reboot, no barrier command.** The only
|
|
2908
|
+
* device-mutating call in this file is PTZ, and it is off unless explicitly
|
|
2909
|
+
* enabled.
|
|
2910
|
+
*
|
|
2911
|
+
* ## How a picture is actually fetched — measured, 2026-08-10
|
|
2912
|
+
*
|
|
2913
|
+
* The recorder these cameras live on is reachable on **RTSP (554) only**: its
|
|
2914
|
+
* HTTP interface (80/443) and the Dahua native port (37777) are not exposed,
|
|
2915
|
+
* verified by TCP connect from this workstation AND from the staging API host.
|
|
2916
|
+
* So `snapshot.cgi`, `magicBox.cgi`, `global.cgi` and PTZ — all HTTP CGI — cannot
|
|
2917
|
+
* be reached at all, and a snapshot has to come off the video stream.
|
|
2918
|
+
*
|
|
2919
|
+
* It therefore runs one `ffmpeg` per picture: connect, take a single frame,
|
|
2920
|
+
* encode JPEG, exit. Measured against the live recorder: a substream frame is
|
|
2921
|
+
* ~17–19 KB and arrives in 7–9 s; three concurrent pulls showed no degradation.
|
|
2922
|
+
* That latency is why the snapshot cache matters and why the RTSP budget is its
|
|
2923
|
+
* own, larger number.
|
|
2924
|
+
*
|
|
2925
|
+
* **ffmpeg's stderr is discarded, not piped** — the RTSP URL it echoes on failure
|
|
2926
|
+
* contains the recorder's credential, so the safest handling is for those bytes
|
|
2927
|
+
* never to exist in this process.
|
|
2928
|
+
*/
|
|
2929
|
+
declare function useCameraViewService(): {
|
|
2930
|
+
authorizeCamera: (params: {
|
|
2931
|
+
cameraId: string;
|
|
2932
|
+
userId?: string;
|
|
2933
|
+
permissions: Array<string>;
|
|
2934
|
+
}) => Promise<bson.Document>;
|
|
2935
|
+
getSnapshot: (params: {
|
|
2936
|
+
cameraId: string;
|
|
2937
|
+
userId?: string;
|
|
2938
|
+
/** Full-resolution main stream. For an evidence capture, not for a tile. */
|
|
2939
|
+
hd?: boolean;
|
|
2940
|
+
}) => Promise<{
|
|
2941
|
+
buffer: Buffer;
|
|
2942
|
+
cached: boolean;
|
|
2943
|
+
}>;
|
|
2944
|
+
captureSnapshot: (params: {
|
|
2945
|
+
cameraId: string;
|
|
2946
|
+
userId?: string;
|
|
2947
|
+
}) => Promise<{
|
|
2948
|
+
id: string;
|
|
2949
|
+
size: number;
|
|
2950
|
+
}>;
|
|
2951
|
+
getStatus: (params: {
|
|
2952
|
+
cameraId: string;
|
|
2953
|
+
userId?: string;
|
|
2954
|
+
}) => Promise<{
|
|
2955
|
+
reachable: boolean;
|
|
2956
|
+
health: "unsupported";
|
|
2957
|
+
reason: string;
|
|
2958
|
+
camera: {
|
|
2959
|
+
_id: any;
|
|
2960
|
+
name: any;
|
|
2961
|
+
type: any;
|
|
2962
|
+
status: any;
|
|
2963
|
+
guardPost: any;
|
|
2964
|
+
siteName: any;
|
|
2965
|
+
};
|
|
2966
|
+
snapshotSupported: boolean;
|
|
2967
|
+
firmwareVersion: null;
|
|
2968
|
+
deviceTime: null;
|
|
2969
|
+
driftSeconds: null;
|
|
2970
|
+
detailUnavailableReason: string;
|
|
2971
|
+
} | {
|
|
2972
|
+
reachable: boolean;
|
|
2973
|
+
health: "ok" | "drifted" | "unreachable";
|
|
2974
|
+
reason: string | null;
|
|
2975
|
+
camera: {
|
|
2976
|
+
_id: any;
|
|
2977
|
+
name: any;
|
|
2978
|
+
type: any;
|
|
2979
|
+
status: any;
|
|
2980
|
+
guardPost: any;
|
|
2981
|
+
siteName: any;
|
|
2982
|
+
};
|
|
2983
|
+
snapshotSupported: boolean;
|
|
2984
|
+
firmwareVersion: null;
|
|
2985
|
+
deviceTime: null;
|
|
2986
|
+
driftSeconds: null;
|
|
2987
|
+
detailUnavailableReason: string;
|
|
2988
|
+
}>;
|
|
2989
|
+
movePtz: (params: {
|
|
2990
|
+
cameraId: string;
|
|
2991
|
+
userId?: string;
|
|
2992
|
+
action: string;
|
|
2993
|
+
code: string;
|
|
2994
|
+
speed?: number;
|
|
2995
|
+
}) => Promise<void>;
|
|
2996
|
+
ptzEnabled: boolean;
|
|
2997
|
+
};
|
|
2998
|
+
|
|
2999
|
+
/**
|
|
3000
|
+
* Camera functions for Virtual Patrol.
|
|
3001
|
+
*
|
|
3002
|
+
* Every handler is mounted behind `requireAuth` and every one re-derives the
|
|
3003
|
+
* caller from the session — `req.user`, never a body or query field. The camera
|
|
3004
|
+
* id in the path selects a record; the service decides whether the caller may
|
|
3005
|
+
* have it.
|
|
3006
|
+
*/
|
|
3007
|
+
declare function useCameraViewController(): {
|
|
3008
|
+
snapshot: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
3009
|
+
capture: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
3010
|
+
status: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
3011
|
+
ptz: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
3012
|
+
capabilities: (_req: Request, res: Response) => Promise<void>;
|
|
3013
|
+
};
|
|
3014
|
+
|
|
2588
3015
|
type TCustomerSite = {
|
|
2589
3016
|
_id?: ObjectId;
|
|
2590
3017
|
name: string;
|
|
@@ -8409,4 +8836,4 @@ declare function useNotificationController(): {
|
|
|
8409
8836
|
add: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
8410
8837
|
};
|
|
8411
8838
|
|
|
8412
|
-
export { ANPRMode, AccessTypeProps, AppServiceType, AssignCardConfig, BidStatus, BidType, BuildingLevelStatus, BuildingStatus, BulkCardUpdate, BulletinOrder, BulletinRecipient, BulletinSort, BulletinStatus, BulletinVideoOrder, BulletinVideoSort, Camera, CameraType, DEVICE_STATUS, DOBStatus, DayOfWeek, DynamicFormFields, EAccessCardTypes, EAccessCardUserTypes, EmailSender, EntryOrder, EntrySort, EventOrder, EventSort, EventStatus, EventType, FacilitySort, FacilityStatus, FormEntryStatus, GuestSort, GuestStatus, HID_PERMISSION_CATEGORIES, IAccessCard, IAccessCardTransaction, MAccessCard, MAccessCardTransaction, MAddress, MAttendance, MAttendanceSettings, MBidPreloved, MBillingConfiguration, MBillingItem, MBuilding, MBuildingLevel, MBuildingUnit, MBulletinBoard, MBulletinVideo, MCategoryPreloved, MChannelPreloved, MChat, MChatPreloved, MCustomer, MCustomerSite, MDocumentManagement, MEntryPassSettings, MEventManagement, MFeedback, MFile, MFormEntry, MGuestManagement, MHidAmicoEvent, MHidAmicoIdentity, MHidAmicoReader, MHidSitePermissions, MIncidentReport, MManpowerDesignations, MManpowerMonitoring, MManpowerRemarks, MManpowerSites, MMember, MNfcPatrolLog, MNfcPatrolRoute, MNfcPatrolSettings, MNfcPatrolSettingsUpdate, MNfcPatrolTag, MNotification, MOccurrenceBook, MOccurrenceEntry, MOccurrenceSubject, MOnlineForm, MOrg, MOvernightParkingApprovalHours, MOvernightParkingRequest, MPatrolLog, MPatrolQuestion, MPatrolRoute, MPerson, MPost, MPostFavorite, MPromoCode, MRobot, MRole, MRoleV2, MServiceProvider, MServiceProviderBilling, MSession, MSite, MSiteCamera, MSiteFacility, MSiteFacilityBooking, MStatementOfAccount, MSubcategoryPreloved, MSubscription, MUnitBilling, MUser, MVehicle, MVehicleTransaction, MVerification, MVerificationV2, MVisitorTransaction, MWorkOrder, NotificationAppSlug, NotificationModule, OrgNature, OvernightParkingRequestSort, OvernightParkingRequestStatus, PERSON_TYPES, PStatus, Period, PersonStatus, PersonType, PersonTypes, PostOrder, PostSort, PostStatus, QrTagProps, ResidentAppModuleKey, SiteAddress, SiteCategories, SiteStatus, SortFields, SortOrder, Status, SubjectOrder, SubjectSort, SubscriptionType, TAccessMngmntSettings, TActionStatus, TAddress, TAffectedEntities, TAffectedInjured, TAppServiceType, TApprovedBy, TApprover, TAttendance, TAttendanceCheckIn, TAttendanceCheckOut, TAttendanceCheckTime, TAttendanceLocation, TAttendanceSettings, TAttendanceSettingsGetBySite, TAuthorities, TAuthoritiesCalled, TBidPreloved, TBilling, TBillingConfiguration, TBillingItem, TBuilding, TBuildingLevel, TBuildingUnit, TBulletinBoard, TBulletinVideo, TCamera, TCategoryPreloved, TChannelPreloved, TChat, TChatPreloved, TCheckPoint$1 as TCheckPoint, TComplaintInfo, TComplaintReceivedTo, TCounter, TCreateNfcPatrolLog, TCustomer, TCustomerSite, TDayNumber, TDaySchedule, TDefaultAccessCard, TDesignations, TDocs, TDocumentCreate, TDocumentManagement, TEntryPassSettings, TEventManagement, TFeedback, TFeedbackMetadata, TFeedbackUpdate, TFeedbackUpdateCategory, TFeedbackUpdateServiceProvider, TFeedbackUpdateStatus, TFeedbackUpdateToCompleted, TFile, TFiles, TFolderUpdate, TFormEntry, TGetAttendancesByUserQuery, TGetAttendancesQuery, TGuestManagement, THidAmicoEvent, THidAmicoIdentity, THidAmicoReader, THidPermissionAssignment, THidPermissionCategory, THidSitePermissions, TIncidentInformation, TIncidentReport, TIncidentTypeAndTime, TInvoice, TKeyRef, TManpowerDesignations, TManpowerDesignationsUpdate, TManpowerMonitoring, TManpowerMonitoringUpdate, TManpowerRemarks, TManpowerRemarksStatusUpdate, TManpowerRemarksUpdate, TManpowerSearchFilter, TManpowerSites, TMember, TMemberUpdateStatus, TMessagePreloved, TMiniRole, TNfcPatrolLog, TNfcPatrolRoute, TNfcPatrolRouteEdit, TNfcPatrolSettings, TNfcPatrolSettingsGetBySite, TNfcPatrolSettingsUpdate, TNfcPatrolTag, TNfcPatrolTagConfigureReset, TNfcPatrolTagEdit, TNfcPatrolTagUpdateData, TNotification, TOccurrenceBook, TOccurrenceEntry, TOccurrenceSubject, TOnlineForm, TOrg, TOvernightParkingApprovalHours, TOvernightParkingRequest, TPatrolLog, TPatrolQuestion, TPatrolRoute, TPerson, TPlaceOfIncident, TPlates, TPost, TPostFavorite, TPrice, TPriceType, TPromoCode, TPromoTier, TRecipientOfComplaint, TRemarks, TResident, TResidentAppModules, TRobot, TRobotMetadata, TRole, TRoleV2, TRoute, TSOABillingItem, TSOAStatus, TServiceProvider, TServiceProviderBilling, TSession, TSessionCreate, TShifts, TSignNfcPatrolLog, TSite, TSiteCamera, TSiteFacility, TSiteFacilityBooking, TSiteInfo, TSiteInformation, TSiteMetadata, TSiteUpdateBlock, TStatementOfAccount, TSubcategoryPreloved, TSubmissionForm, TSubscription, TUnitBilling, TUnits, TUpdateFormEntry, TUpdateName, TUser, TUserCreate, TVehicle, TVehicleTransaction, TVehicleUpdate, TVerification, TVerificationMetadata, TVerificationMetadataV2, TVerificationV2, TVisitorTransaction, TWorkOrder, TWorkOrderMetadata, TWorkOrderUpdate, TWorkOrderUpdateStatus, TWorkOrderUpdateToCompleted, TanyoneDamageToProperty, UseAccessManagementRepo, UserStatus, VehicleCategory, VehicleOrder, VehicleSort, VehicleStatus, VehicleType, VerificationLinkType, VerificationStatus, VerificationSubjectType, VerificationType, VisitorSort, VisitorStatus, addressSchema, allowedFieldsSite, allowedNatures, attendanceSchema, attendanceSettingsSchema, building_level_namespace_collection, building_units_namespace_collection, buildings_namespace_collection, bulletin_boards_namespace_collection, chatPrelovedEvents, chatSchema, createManpowerRemarksDaily, customerSchema, designationsSchema, events_namespace_collection, facility_bookings_namespace_collection, feedbackSchema, feedbacks2_namespace_collection, feedbacks_namespace_collection, formatDahuaDate, guests_namespace_collection, incidentReport, incidentReportLog, incidents_namespace_collection, logCamera, manpowerDesignationsSchema, manpowerEvents, manpowerMonitoringSchema, manpowerRemarksSchema, manpowerSitesSchema, nfcPatrolSettingsSchema, nfcPatrolSettingsSchemaUpdate, occurrence_book_namespace_collection, online_forms_namespace_collection, orgSchema, overnight_parking_requests_namespace_collection, parseDahuaFind, promoCodeSchema, remarksSchema, residentAppModuleKeys, residentFormEntry, robotSchema, schema, schemaAppSlugNotification, schemaApprovedBy, schemaApprover, schemaBidPreloved, schemaBilling, schemaBillingConfiguration, schemaBillingItem, schemaBuilding, schemaBuildingLevel, schemaBuildingUnit, schemaBuildingUpdateOptions, schemaBulletinBoard, schemaBulletinVideo, schemaCategoryPreloved, schemaChannelPreloved, schemaChatPreloved, schemaCreateHidAmicoIdentity, schemaCreateNfcPatrolLog, schemaCreateNotification, schemaCustomerSite, schemaDocumentManagement, schemaEntryPassSettings, schemaEventManagement, schemaFiles, schemaFormEntry, schemaGuestManagement, schemaHidAmicoConfiguration, schemaHidAmicoEvent, schemaHidAmicoExecuteActions, schemaHidAmicoIdentity, schemaHidAmicoIdentityIdParams, schemaHidAmicoIdentityQuery, schemaHidAmicoIntercomCall, schemaHidAmicoLogQuery, schemaHidAmicoNotificationParams, schemaHidAmicoObjectOperation, schemaHidAmicoReader, schemaHidAmicoReaderIdParams, schemaHidAmicoReaderListQuery, schemaHidAmicoSetConfiguration, schemaHidAmicoSiteIdParams, schemaHidAmicoSync, schemaHidAmicoUserImageParams, schemaHidAmicoVisitorQr, schemaHidPermissionCandidateQuery, schemaIncidentReport, schemaListNotification, schemaMultipleDocumentManagement, schemaNfcPatrolLog, schemaNfcPatrolRoute, schemaNfcPatrolTag, schemaNfcPatrolTagUpdateData, schemaNotification, schemaOccurrenceBook, schemaOccurrenceEntry, schemaOccurrenceSubject, schemaOnlineForm, schemaOvernightParkingApprovalHours, schemaOvernightParkingRequest, schemaPatrolLog, schemaPatrolQuestion, schemaPatrolRoute, schemaPerson, schemaPlate, schemaPost, schemaPostFavorite, schemaServiceProvider, schemaServiceProviderBilling, schemaSignNfcPatrolLog, schemaSiteCamera, schemaSiteFacility, schemaSiteFacilityBooking, schemaStatementOfAccount, schemaSubcategoryPreloved, schemaUnitBilling, schemaUpdateBidPreloved, schemaUpdateBuildingLevel, schemaUpdateBulletinBoard, schemaUpdateBulletinVideo, schemaUpdateCategoryPreloved, schemaUpdateChatPreloved, schemaUpdateDocumentManagement, schemaUpdateEntryPassSettings, schemaUpdateEventManagement, schemaUpdateFolderManagement, schemaUpdateFormEntry, schemaUpdateGuestManagement, schemaUpdateHidAmicoIdentity, schemaUpdateHidAmicoReader, schemaUpdateHidSitePermissions, schemaUpdateIncidentReport, schemaUpdateNotification, schemaUpdateOccurrenceBook, schemaUpdateOccurrenceEntry, schemaUpdateOccurrenceSubject, schemaUpdateOnlineForm, schemaUpdateOptions, schemaUpdateOvernightParkingRequest, schemaUpdatePatrolLog, schemaUpdatePatrolQuestion, schemaUpdatePatrolRoute, schemaUpdatePerson, schemaUpdatePost, schemaUpdatePostFavorite, schemaUpdateServiceProviderBilling, schemaUpdateSiteBillingConfiguration, schemaUpdateSiteBillingItem, schemaUpdateSiteCamera, schemaUpdateSiteFacility, schemaUpdateSiteFacilityBooking, schemaUpdateSiteUnitBilling, schemaUpdateStatementOfAccount, schemaUpdateSubcategoryPreloved, schemaUpdateVisTrans, schemaVehicleTransaction, schemaVisitorTransaction, schemeCamera, schemeLogCamera, sessionSchema, shiftSchema, siteSchema, site_people_namespace_collection, updateRemarksStatusEod, updateRemarksisAcknowledged, updateSiteSchema, useAccessManagementController, useAddressRepo, useAttendanceController, useAttendanceRepository, useAttendanceSettingsController, useAttendanceSettingsRepository, useAttendanceSettingsService, useAuthController, useAuthControllerV2, useAuthService, useAuthServiceV2, useBidPrelovedController, useBidPrelovedRepo, useBidPrelovedService, useBuildingController, useBuildingLevelController, useBuildingLevelRepo, useBuildingLevelService, useBuildingRepo, useBuildingService, useBuildingUnitController, useBuildingUnitRepo, useBuildingUnitService, useBulletinBoardController, useBulletinBoardRepo, useBulletinBoardService, useBulletinVideoController, useBulletinVideoRepo, useBulletinVideoService, useCategoryPrelovedController, useCategoryPrelovedRepo, useChannelPrelovedController, useChannelPrelovedRepo, useChatController, useChatPrelovedController, useChatPrelovedRepo, useChatPrelovedService, useChatRepo, useCounterModel, useCounterRepo, useCustomerController, useCustomerRepo, useCustomerSiteController, useCustomerSiteRepo, useCustomerSiteService, useDahuaService, useDashboardController, useDashboardRepo, useDocumentManagementController, useDocumentManagementRepo, useDocumentManagementService, useEntryPassSettingsController, useEntryPassSettingsRepo, useEventManagementController, useEventManagementRepo, useEventManagementService, useFeedbackController, useFeedbackRepo, useFeedbackService, useFileController, useFileRepo, useFileService, useFormEntryController, useFormEntryRepo, useGuestManagementController, useGuestManagementRepo, useGuestManagementService, useHidAmicoController, useHidAmicoRepo, useHidAmicoService, useHrmLabsAttendanceCtrl, useHrmLabsAttendanceSrvc, useIncidentReportController, useIncidentReportRepo, useIncidentReportService, useInvoiceController, useInvoiceModel, useInvoiceRepo, useManpowerDesignationCtrl, useManpowerDesignationRepo, useManpowerMonitoringCtrl, useManpowerMonitoringRepo, useManpowerMonitoringSrvc, useManpowerRemarkCtrl, useManpowerRemarksRepo, useManpowerSitesCtrl, useManpowerSitesRepo, useManpowerSitesSrvc, useMemberController, useMemberRepo, useMemberService, useNewDashboardController, useNewDashboardRepo, useNfcPatrolLogController, useNfcPatrolLogRepo, useNfcPatrolLogService, useNfcPatrolRouteController, useNfcPatrolRouteRepo, useNfcPatrolRouteService, useNfcPatrolSettingsController, useNfcPatrolSettingsRepository, useNfcPatrolSettingsService, useNfcPatrolTagController, useNfcPatrolTagRepo, useNfcPatrolTagService, useNotificationController, useNotificationRepo, useOccurrenceBookController, useOccurrenceBookRepo, useOccurrenceBookService, useOccurrenceEntryController, useOccurrenceEntryRepo, useOccurrenceEntryService, useOccurrenceSubjectController, useOccurrenceSubjectRepo, useOccurrenceSubjectService, useOnlineFormController, useOnlineFormRepo, useOrgController, useOrgControllerV2, useOrgRepo, useOvernightParkingController, useOvernightParkingRepo, useOvernightParkingRequestController, useOvernightParkingRequestRepo, useOvernightParkingRequestService, usePatrolLogController, usePatrolLogRepo, usePatrolQuestionController, usePatrolQuestionRepo, usePatrolRouteController, usePatrolRouteRepo, usePersonController, usePersonRepo, usePostFavoriteController, usePostFavoriteRepo, usePostFavoriteService, usePostPrelovedController, usePostPrelovedRepo, usePriceController, usePriceModel, usePriceRepo, usePromoCodeController, usePromoCodeRepo, useRedDotPaymentController, useRedDotPaymentRepo, useRedDotPaymentSvc, useRobotController, useRobotRepo, useRobotService, useRoleController, useRoleControllerV2, useRoleRepo, useRoleRepoV2, useRoleServiceV2, useServiceProviderBillingController, useServiceProviderBillingRepo, useServiceProviderBillingService, useServiceProviderController, useServiceProviderRepo, useSessionRepo, useSiteBillingConfigurationController, useSiteBillingConfigurationRepo, useSiteBillingItemController, useSiteBillingItemRepo, useSiteCameraController, useSiteCameraRepo, useSiteCameraService, useSiteController, useSiteFacilityBookingController, useSiteFacilityBookingRepo, useSiteFacilityBookingService, useSiteFacilityController, useSiteFacilityRepo, useSiteFacilityService, useSiteRepo, useSiteService, useSiteUnitBillingController, useSiteUnitBillingRepo, useSiteUnitBillingService, useStatementOfAccountController, useStatementOfAccountRepo, useSubcategoryPrelovedController, useSubcategoryPrelovedRepo, useSubscriptionController, useSubscriptionRepo, useSubscriptionService, useUserController, useUserControllerV2, useUserRepo, useUserRepoV2, useUserService, useUserServiceV2, useVehicleController, useVehicleRepo, useVehicleService, useVerificationController, useVerificationControllerV2, useVerificationRepo, useVerificationRepoV2, useVerificationService, useVerificationServiceV2, useVisitorTransactionController, useVisitorTransactionRepo, useVisitorTransactionService, useWorkOrderController, useWorkOrderRepo, useWorkOrderService, userSchema, vehicleSchema, vehicles_namespace_collection, visitorPersonRepo, visitorPersonService, visitorType, visitors_namespace_collection, workOrderSchema, work_orders2_namespace_collection, work_orders_namespace_collection };
|
|
8839
|
+
export { ANPRMode, AccessTypeProps, AppServiceType, AssignCardConfig, BidStatus, BidType, BuildingLevelStatus, BuildingStatus, BulkCardUpdate, BulletinOrder, BulletinRecipient, BulletinSort, BulletinStatus, BulletinVideoOrder, BulletinVideoSort, CAMERA_NOT_PATROL_OR_CCTV, CAMERA_PTZ_PERMISSIONS, CAMERA_REQUEST_TIMEOUT_MS, CAMERA_RTSP_TIMEOUT_MS, CAMERA_SNAPSHOT_CACHE_SECONDS, CAMERA_SNAPSHOT_MAX_BYTES, CAMERA_TYPE_ANPR, CAMERA_TYPE_IP, CAMERA_VIEW_PERMISSIONS, CLOCK_DRIFT_WARN_SECONDS, CURRENT_TIME_ENDPOINT, Camera, CameraDevice, CameraType, DEVICE_STATUS, DOBStatus, DayOfWeek, DynamicFormFields, EAccessCardTypes, EAccessCardUserTypes, EmailSender, EntryOrder, EntrySort, EventOrder, EventSort, EventStatus, EventType, FacilitySort, FacilityStatus, FormEntryStatus, GuestSort, GuestStatus, HID_PERMISSION_CATEGORIES, IAccessCard, IAccessCardTransaction, MAccessCard, MAccessCardTransaction, MAddress, MAttendance, MAttendanceSettings, MBidPreloved, MBillingConfiguration, MBillingItem, MBuilding, MBuildingLevel, MBuildingUnit, MBulletinBoard, MBulletinVideo, MCategoryPreloved, MChannelPreloved, MChat, MChatPreloved, MCustomer, MCustomerSite, MDocumentManagement, MEntryPassSettings, MEventManagement, MFeedback, MFile, MFormEntry, MGuestManagement, MHidAmicoEvent, MHidAmicoIdentity, MHidAmicoReader, MHidSitePermissions, MIncidentReport, MManpowerDesignations, MManpowerMonitoring, MManpowerRemarks, MManpowerSites, MMember, MNfcPatrolLog, MNfcPatrolRoute, MNfcPatrolSettings, MNfcPatrolSettingsUpdate, MNfcPatrolTag, MNotification, MOccurrenceBook, MOccurrenceEntry, MOccurrenceSubject, MOnlineForm, MOrg, MOvernightParkingApprovalHours, MOvernightParkingRequest, MPatrolLog, MPatrolQuestion, MPatrolRoute, MPerson, MPost, MPostFavorite, MPromoCode, MRobot, MRole, MRoleV2, MServiceProvider, MServiceProviderBilling, MSession, MSite, MSiteCamera, MSiteFacility, MSiteFacilityBooking, MStatementOfAccount, MSubcategoryPreloved, MSubscription, MUnitBilling, MUser, MVehicle, MVehicleTransaction, MVerification, MVerificationV2, MVisitorTransaction, MWorkOrder, NotificationAppSlug, NotificationModule, OrgNature, OvernightParkingRequestSort, OvernightParkingRequestStatus, PATROL_CCTV_CAMERA_FILTER, PERSON_TYPES, PStatus, PTZ_ALLOWED_ACTIONS, PTZ_ALLOWED_CODES, Period, PersonStatus, PersonType, PersonTypes, PostOrder, PostSort, PostStatus, QrTagProps, ResidentAppModuleKey, SOFTWARE_VERSION_ENDPOINT, SiteAddress, SiteCategories, SiteStatus, SortFields, SortOrder, Status, SubjectOrder, SubjectSort, SubscriptionType, TAccessMngmntSettings, TActionStatus, TAddress, TAffectedEntities, TAffectedInjured, TAppServiceType, TApprovedBy, TApprover, TAttendance, TAttendanceCheckIn, TAttendanceCheckOut, TAttendanceCheckTime, TAttendanceLocation, TAttendanceSettings, TAttendanceSettingsGetBySite, TAuthorities, TAuthoritiesCalled, TBidPreloved, TBilling, TBillingConfiguration, TBillingItem, TBuilding, TBuildingLevel, TBuildingUnit, TBulletinBoard, TBulletinVideo, TCamera, TCategoryPreloved, TChannelPreloved, TChat, TChatPreloved, TCheckPoint$1 as TCheckPoint, TComplaintInfo, TComplaintReceivedTo, TCounter, TCreateNfcPatrolLog, TCustomer, TCustomerSite, TDayNumber, TDaySchedule, TDefaultAccessCard, TDesignations, TDocs, TDocumentCreate, TDocumentManagement, TEntryPassSettings, TEventManagement, TFeedback, TFeedbackMetadata, TFeedbackUpdate, TFeedbackUpdateCategory, TFeedbackUpdateServiceProvider, TFeedbackUpdateStatus, TFeedbackUpdateToCompleted, TFile, TFiles, TFolderUpdate, TFormEntry, TGetAttendancesByUserQuery, TGetAttendancesQuery, TGuestManagement, THidAmicoEvent, THidAmicoIdentity, THidAmicoReader, THidPermissionAssignment, THidPermissionCategory, THidSitePermissions, TIncidentInformation, TIncidentReport, TIncidentTypeAndTime, TInvoice, TKeyRef, TManpowerDesignations, TManpowerDesignationsUpdate, TManpowerMonitoring, TManpowerMonitoringUpdate, TManpowerRemarks, TManpowerRemarksStatusUpdate, TManpowerRemarksUpdate, TManpowerSearchFilter, TManpowerSites, TMember, TMemberUpdateStatus, TMessagePreloved, TMiniRole, TNfcPatrolLog, TNfcPatrolRoute, TNfcPatrolRouteEdit, TNfcPatrolSettings, TNfcPatrolSettingsGetBySite, TNfcPatrolSettingsUpdate, TNfcPatrolTag, TNfcPatrolTagConfigureReset, TNfcPatrolTagEdit, TNfcPatrolTagUpdateData, TNotification, TOccurrenceBook, TOccurrenceEntry, TOccurrenceSubject, TOnlineForm, TOrg, TOvernightParkingApprovalHours, TOvernightParkingRequest, TPatrolLog, TPatrolQuestion, TPatrolRoute, TPerson, TPlaceOfIncident, TPlates, TPost, TPostFavorite, TPrice, TPriceType, TPromoCode, TPromoTier, TRecipientOfComplaint, TRemarks, TResident, TResidentAppModules, TRobot, TRobotMetadata, TRole, TRoleV2, TRoute, TSOABillingItem, TSOAStatus, TServiceProvider, TServiceProviderBilling, TSession, TSessionCreate, TShifts, TSignNfcPatrolLog, TSite, TSiteCamera, TSiteFacility, TSiteFacilityBooking, TSiteInfo, TSiteInformation, TSiteMetadata, TSiteUpdateBlock, TStatementOfAccount, TSubcategoryPreloved, TSubmissionForm, TSubscription, TUnitBilling, TUnits, TUpdateFormEntry, TUpdateName, TUser, TUserCreate, TVehicle, TVehicleTransaction, TVehicleUpdate, TVerification, TVerificationMetadata, TVerificationMetadataV2, TVerificationV2, TVisitorTransaction, TWorkOrder, TWorkOrderMetadata, TWorkOrderUpdate, TWorkOrderUpdateStatus, TWorkOrderUpdateToCompleted, TanyoneDamageToProperty, UseAccessManagementRepo, UserStatus, VehicleCategory, VehicleOrder, VehicleSort, VehicleStatus, VehicleType, VerificationLinkType, VerificationStatus, VerificationSubjectType, VerificationType, VisitorSort, VisitorStatus, addressSchema, allowedFieldsSite, allowedNatures, attendanceSchema, attendanceSettingsSchema, building_level_namespace_collection, building_units_namespace_collection, buildings_namespace_collection, bulletin_boards_namespace_collection, cameraBaseUrl, cameraDevices, cameraHealthSummary, chatPrelovedEvents, chatSchema, clampPtzSpeed, clockDriftSeconds, createManpowerRemarksDaily, customerSchema, designationsSchema, events_namespace_collection, facility_bookings_namespace_collection, feedbackSchema, feedbacks2_namespace_collection, feedbacks_namespace_collection, ffmpegFrameArgs, ffmpegPath, formatDahuaDate, guests_namespace_collection, hasAnyPermission, incidentReport, incidentReportLog, incidents_namespace_collection, isCameraEntitled, isPatrolCctvCamera, logCamera, manpowerDesignationsSchema, manpowerEvents, manpowerMonitoringSchema, manpowerRemarksSchema, manpowerSitesSchema, nfcPatrolSettingsSchema, nfcPatrolSettingsSchemaUpdate, occurrence_book_namespace_collection, online_forms_namespace_collection, orgSchema, overnight_parking_requests_namespace_collection, parseCameraHost, parseDahuaFind, parseDeviceTime, parseSoftwareVersion, promoCodeSchema, ptzEndpoint, publicCameraFields, remarksSchema, residentAppModuleKeys, residentFormEntry, resolutionRefusalReason, resolveCamera, robotSchema, rtspUrl, schema, schemaAppSlugNotification, schemaApprovedBy, schemaApprover, schemaBidPreloved, schemaBilling, schemaBillingConfiguration, schemaBillingItem, schemaBuilding, schemaBuildingLevel, schemaBuildingUnit, schemaBuildingUpdateOptions, schemaBulletinBoard, schemaBulletinVideo, schemaCategoryPreloved, schemaChannelPreloved, schemaChatPreloved, schemaCreateHidAmicoIdentity, schemaCreateNfcPatrolLog, schemaCreateNotification, schemaCustomerSite, schemaDocumentManagement, schemaEntryPassSettings, schemaEventManagement, schemaFiles, schemaFormEntry, schemaGuestManagement, schemaHidAmicoConfiguration, schemaHidAmicoEvent, schemaHidAmicoExecuteActions, schemaHidAmicoIdentity, schemaHidAmicoIdentityIdParams, schemaHidAmicoIdentityQuery, schemaHidAmicoIntercomCall, schemaHidAmicoLogQuery, schemaHidAmicoNotificationParams, schemaHidAmicoObjectOperation, schemaHidAmicoReader, schemaHidAmicoReaderIdParams, schemaHidAmicoReaderListQuery, schemaHidAmicoSetConfiguration, schemaHidAmicoSiteIdParams, schemaHidAmicoSync, schemaHidAmicoUserImageParams, schemaHidAmicoVisitorQr, schemaHidPermissionCandidateQuery, schemaIncidentReport, schemaListNotification, schemaMultipleDocumentManagement, schemaNfcPatrolLog, schemaNfcPatrolRoute, schemaNfcPatrolTag, schemaNfcPatrolTagUpdateData, schemaNotification, schemaOccurrenceBook, schemaOccurrenceEntry, schemaOccurrenceSubject, schemaOnlineForm, schemaOvernightParkingApprovalHours, schemaOvernightParkingRequest, schemaPatrolLog, schemaPatrolQuestion, schemaPatrolRoute, schemaPerson, schemaPlate, schemaPost, schemaPostFavorite, schemaServiceProvider, schemaServiceProviderBilling, schemaSignNfcPatrolLog, schemaSiteCamera, schemaSiteFacility, schemaSiteFacilityBooking, schemaStatementOfAccount, schemaSubcategoryPreloved, schemaUnitBilling, schemaUpdateBidPreloved, schemaUpdateBuildingLevel, schemaUpdateBulletinBoard, schemaUpdateBulletinVideo, schemaUpdateCategoryPreloved, schemaUpdateChatPreloved, schemaUpdateDocumentManagement, schemaUpdateEntryPassSettings, schemaUpdateEventManagement, schemaUpdateFolderManagement, schemaUpdateFormEntry, schemaUpdateGuestManagement, schemaUpdateHidAmicoIdentity, schemaUpdateHidAmicoReader, schemaUpdateHidSitePermissions, schemaUpdateIncidentReport, schemaUpdateNotification, schemaUpdateOccurrenceBook, schemaUpdateOccurrenceEntry, schemaUpdateOccurrenceSubject, schemaUpdateOnlineForm, schemaUpdateOptions, schemaUpdateOvernightParkingRequest, schemaUpdatePatrolLog, schemaUpdatePatrolQuestion, schemaUpdatePatrolRoute, schemaUpdatePerson, schemaUpdatePost, schemaUpdatePostFavorite, schemaUpdateServiceProviderBilling, schemaUpdateSiteBillingConfiguration, schemaUpdateSiteBillingItem, schemaUpdateSiteCamera, schemaUpdateSiteFacility, schemaUpdateSiteFacilityBooking, schemaUpdateSiteUnitBilling, schemaUpdateStatementOfAccount, schemaUpdateSubcategoryPreloved, schemaUpdateVisTrans, schemaVehicleTransaction, schemaVisitorTransaction, schemeCamera, schemeLogCamera, sessionSchema, shiftSchema, siteSchema, site_people_namespace_collection, snapshotEndpoint, snapshotRefusalReason, updateRemarksStatusEod, updateRemarksisAcknowledged, updateSiteSchema, useAccessManagementController, useAddressRepo, useAttendanceController, useAttendanceRepository, useAttendanceSettingsController, useAttendanceSettingsRepository, useAttendanceSettingsService, useAuthController, useAuthControllerV2, useAuthService, useAuthServiceV2, useBidPrelovedController, useBidPrelovedRepo, useBidPrelovedService, useBuildingController, useBuildingLevelController, useBuildingLevelRepo, useBuildingLevelService, useBuildingRepo, useBuildingService, useBuildingUnitController, useBuildingUnitRepo, useBuildingUnitService, useBulletinBoardController, useBulletinBoardRepo, useBulletinBoardService, useBulletinVideoController, useBulletinVideoRepo, useBulletinVideoService, useCameraViewController, useCameraViewService, useCategoryPrelovedController, useCategoryPrelovedRepo, useChannelPrelovedController, useChannelPrelovedRepo, useChatController, useChatPrelovedController, useChatPrelovedRepo, useChatPrelovedService, useChatRepo, useCounterModel, useCounterRepo, useCustomerController, useCustomerRepo, useCustomerSiteController, useCustomerSiteRepo, useCustomerSiteService, useDahuaService, useDashboardController, useDashboardRepo, useDocumentManagementController, useDocumentManagementRepo, useDocumentManagementService, useEntryPassSettingsController, useEntryPassSettingsRepo, useEventManagementController, useEventManagementRepo, useEventManagementService, useFeedbackController, useFeedbackRepo, useFeedbackService, useFileController, useFileRepo, useFileService, useFormEntryController, useFormEntryRepo, useGuestManagementController, useGuestManagementRepo, useGuestManagementService, useHidAmicoController, useHidAmicoRepo, useHidAmicoService, useHrmLabsAttendanceCtrl, useHrmLabsAttendanceSrvc, useIncidentReportController, useIncidentReportRepo, useIncidentReportService, useInvoiceController, useInvoiceModel, useInvoiceRepo, useManpowerDesignationCtrl, useManpowerDesignationRepo, useManpowerMonitoringCtrl, useManpowerMonitoringRepo, useManpowerMonitoringSrvc, useManpowerRemarkCtrl, useManpowerRemarksRepo, useManpowerSitesCtrl, useManpowerSitesRepo, useManpowerSitesSrvc, useMemberController, useMemberRepo, useMemberService, useNewDashboardController, useNewDashboardRepo, useNfcPatrolLogController, useNfcPatrolLogRepo, useNfcPatrolLogService, useNfcPatrolRouteController, useNfcPatrolRouteRepo, useNfcPatrolRouteService, useNfcPatrolSettingsController, useNfcPatrolSettingsRepository, useNfcPatrolSettingsService, useNfcPatrolTagController, useNfcPatrolTagRepo, useNfcPatrolTagService, useNotificationController, useNotificationRepo, useOccurrenceBookController, useOccurrenceBookRepo, useOccurrenceBookService, useOccurrenceEntryController, useOccurrenceEntryRepo, useOccurrenceEntryService, useOccurrenceSubjectController, useOccurrenceSubjectRepo, useOccurrenceSubjectService, useOnlineFormController, useOnlineFormRepo, useOrgController, useOrgControllerV2, useOrgRepo, useOvernightParkingController, useOvernightParkingRepo, useOvernightParkingRequestController, useOvernightParkingRequestRepo, useOvernightParkingRequestService, usePatrolLogController, usePatrolLogRepo, usePatrolQuestionController, usePatrolQuestionRepo, usePatrolRouteController, usePatrolRouteRepo, usePersonController, usePersonRepo, usePostFavoriteController, usePostFavoriteRepo, usePostFavoriteService, usePostPrelovedController, usePostPrelovedRepo, usePriceController, usePriceModel, usePriceRepo, usePromoCodeController, usePromoCodeRepo, useRedDotPaymentController, useRedDotPaymentRepo, useRedDotPaymentSvc, useRobotController, useRobotRepo, useRobotService, useRoleController, useRoleControllerV2, useRoleRepo, useRoleRepoV2, useRoleServiceV2, useServiceProviderBillingController, useServiceProviderBillingRepo, useServiceProviderBillingService, useServiceProviderController, useServiceProviderRepo, useSessionRepo, useSiteBillingConfigurationController, useSiteBillingConfigurationRepo, useSiteBillingItemController, useSiteBillingItemRepo, useSiteCameraController, useSiteCameraRepo, useSiteCameraService, useSiteController, useSiteFacilityBookingController, useSiteFacilityBookingRepo, useSiteFacilityBookingService, useSiteFacilityController, useSiteFacilityRepo, useSiteFacilityService, useSiteRepo, useSiteService, useSiteUnitBillingController, useSiteUnitBillingRepo, useSiteUnitBillingService, useStatementOfAccountController, useStatementOfAccountRepo, useSubcategoryPrelovedController, useSubcategoryPrelovedRepo, useSubscriptionController, useSubscriptionRepo, useSubscriptionService, useUserController, useUserControllerV2, useUserRepo, useUserRepoV2, useUserService, useUserServiceV2, useVehicleController, useVehicleRepo, useVehicleService, useVerificationController, useVerificationControllerV2, useVerificationRepo, useVerificationRepoV2, useVerificationService, useVerificationServiceV2, useVisitorTransactionController, useVisitorTransactionRepo, useVisitorTransactionService, useWorkOrderController, useWorkOrderRepo, useWorkOrderService, userSchema, vehicleSchema, vehicles_namespace_collection, visitorPersonRepo, visitorPersonService, visitorType, visitors_namespace_collection, workOrderSchema, work_orders2_namespace_collection, work_orders_namespace_collection };
|