@7365admin1/core 3.82.0 → 3.84.0
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 +53 -0
- package/dist/index.d.ts +462 -1
- package/dist/index.js +476 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +451 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/test/building-map.test.mjs +305 -0
- package/test/robot-adapter.test.mjs +179 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
1
|
# @iservice365/core
|
|
2
2
|
|
|
3
|
+
## 3.84.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3c562a9: Building map: a floor plan, and the 3D layout generated from it
|
|
8
|
+
|
|
9
|
+
Adds `building-map.util.ts` — the Open-RMF building-map model (levels, vertices,
|
|
10
|
+
walls, floors, doors, measurements), the scale handling, and the generation step
|
|
11
|
+
that turns an annotated level into the geometry a 3D view draws.
|
|
12
|
+
|
|
13
|
+
The shape is taken from a real `office.building.yaml` in `open-rmf/rmf_demos`,
|
|
14
|
+
and the wall defaults are `traffic_editor`'s own (10cm thick, 2.5m high, 1px =
|
|
15
|
+
5cm before a measurement), so a map made here can be exported to RMF and one
|
|
16
|
+
made in `traffic_editor` read here.
|
|
17
|
+
|
|
18
|
+
`wallsFromOccupancyGrid` traces walls straight out of a floor-plan image, so
|
|
19
|
+
uploading a plan produces a layout without anyone drawing walls by hand — a SLAM
|
|
20
|
+
occupancy grid already marks walls as dark pixels.
|
|
21
|
+
|
|
22
|
+
`buildingMapFromRobotMaps` reads the cleaning robot's own floor maps into that
|
|
23
|
+
model: one level per floor, the vendor's resolution as the scale, its origin as
|
|
24
|
+
the level offset, its cleaning areas as RMF cleaning-zone waypoints and its dock
|
|
25
|
+
as a charger.
|
|
26
|
+
|
|
27
|
+
## 3.83.0
|
|
28
|
+
|
|
29
|
+
### Minor Changes
|
|
30
|
+
|
|
31
|
+
- b9d7f9c: Robot fleet: a vendor-neutral adapter contract, so any brand can be integrated
|
|
32
|
+
|
|
33
|
+
Adds `robot-adapter.util.ts` — the capability model, the tier calculation and the
|
|
34
|
+
brand registry — and `ounitech.adapter.ts`, the first brand behind it.
|
|
35
|
+
|
|
36
|
+
The capability names and tier requirements are Open-RMF's, verbatim from the
|
|
37
|
+
Fleet Adapters table: Full Control, Traffic Light, Read Only, No Interface. That
|
|
38
|
+
means a brand's datasheet reads straight into a tier, and a vendor conversation
|
|
39
|
+
gets a name ("your API is Read Only, we need Traffic Light") rather than a list
|
|
40
|
+
of features we would like.
|
|
41
|
+
|
|
42
|
+
Screens ask the adapter what the robot can do rather than assuming, so a brand
|
|
43
|
+
that cannot pause a process is never shown a Pause button that would fail.
|
|
44
|
+
`commandSupported` refuses an unsupported command at the service too, because a
|
|
45
|
+
command can also arrive from an API caller or a scheduled job.
|
|
46
|
+
|
|
47
|
+
`uncontrollableFleetWarning` enforces Open-RMF's rule that a shared space may
|
|
48
|
+
contain at most one fleet it cannot control — a read-only cleaning fleet plus a
|
|
49
|
+
security robot with no interface is the exact pair the book says makes deadlock
|
|
50
|
+
avoidance nearly impossible.
|
|
51
|
+
|
|
52
|
+
Adds `brand` to the robot record so a row says whose protocol it answers.
|
|
53
|
+
Defaulted to `ounitech` because every existing row is one; a second brand makes
|
|
54
|
+
it a required choice rather than a fallback.
|
|
55
|
+
|
|
3
56
|
## 3.82.0
|
|
4
57
|
|
|
5
58
|
### Minor Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -6656,6 +6656,16 @@ type TRobot = {
|
|
|
6656
6656
|
* picker instead of a lookup.
|
|
6657
6657
|
*/
|
|
6658
6658
|
robotSn?: string;
|
|
6659
|
+
/**
|
|
6660
|
+
* Which brand's adapter speaks to this machine.
|
|
6661
|
+
*
|
|
6662
|
+
* iService365 manages robots from any manufacturer, so a robot record has to
|
|
6663
|
+
* say whose protocol it answers - there is no safe default. It defaults to
|
|
6664
|
+
* `ounitech` only because that is the one brand integrated today and every
|
|
6665
|
+
* existing row is one; a second brand makes this a required choice on the
|
|
6666
|
+
* form, not a fallback.
|
|
6667
|
+
*/
|
|
6668
|
+
brand?: string;
|
|
6659
6669
|
appKey: string;
|
|
6660
6670
|
appToken: string;
|
|
6661
6671
|
createdBy: string | ObjectId;
|
|
@@ -6678,6 +6688,7 @@ declare function MRobot(value: TRobot): {
|
|
|
6678
6688
|
*/
|
|
6679
6689
|
type: "security" | "cleaning";
|
|
6680
6690
|
robotSn: string;
|
|
6691
|
+
brand: string;
|
|
6681
6692
|
appKey: string;
|
|
6682
6693
|
appToken: string;
|
|
6683
6694
|
createdBy: string | ObjectId;
|
|
@@ -7217,6 +7228,165 @@ declare function allowsRobotListing(actor: TRobotPermissionActor | null | undefi
|
|
|
7217
7228
|
*/
|
|
7218
7229
|
declare function robotActionsFor(actor: TRobotPermissionActor | null | undefined): TRobotAction[];
|
|
7219
7230
|
|
|
7231
|
+
/**
|
|
7232
|
+
* The vendor-neutral robot contract: what any brand must offer, and what
|
|
7233
|
+
* iService365 may do with it.
|
|
7234
|
+
*
|
|
7235
|
+
* The first plan deliberately excluded this — one robot type, one lift, both
|
|
7236
|
+
* ours. The owner has since widened the goal: fleet management for **every
|
|
7237
|
+
* brand and model on the market**. That cannot be met by a connector per vendor
|
|
7238
|
+
* bolted onto the screens, because each new brand would then change every
|
|
7239
|
+
* screen. It needs one contract the screens speak, and an adapter per brand
|
|
7240
|
+
* behind it.
|
|
7241
|
+
*
|
|
7242
|
+
* ## The capability set is Open-RMF's, not ours
|
|
7243
|
+
*
|
|
7244
|
+
* Open-RMF classifies every fleet by what its API can do, and the categories
|
|
7245
|
+
* below are that list verbatim (ros2multirobotbook, "Fleet Adapters"). Reusing
|
|
7246
|
+
* them rather than inventing our own means a brand's datasheet can be read
|
|
7247
|
+
* straight into a capability set, and the tier it lands in is a published,
|
|
7248
|
+
* defensible number rather than a Seven365 opinion.
|
|
7249
|
+
*
|
|
7250
|
+
* It also gives a vendor conversation a name: "your API is Read Only, we need
|
|
7251
|
+
* Traffic Light" is a far stronger ask than a list of features we would like.
|
|
7252
|
+
*/
|
|
7253
|
+
/** One capability, named as Open-RMF names it. */
|
|
7254
|
+
declare const ROBOT_CAPABILITIES: readonly ["readLocation", "navigateToPoint", "pauseResume", "pathAndEta", "battery", "sendToDock", "relocalize", "startProcess", "pauseProcess", "processCompletion", "floorReporting", "multiFloor"];
|
|
7255
|
+
type TRobotCapability = (typeof ROBOT_CAPABILITIES)[number];
|
|
7256
|
+
/** What a brand's adapter declares it can do. */
|
|
7257
|
+
type TRobotCapabilities = Readonly<Partial<Record<TRobotCapability, boolean>>>;
|
|
7258
|
+
/**
|
|
7259
|
+
* Open-RMF's four categories of fleet control, best first.
|
|
7260
|
+
*
|
|
7261
|
+
* `no-interface` is a real answer, not an error: our own security robot is one
|
|
7262
|
+
* today — a web page on a building's LAN with no API at all — and the platform
|
|
7263
|
+
* has to be able to say so rather than pretend.
|
|
7264
|
+
*/
|
|
7265
|
+
type TRobotTier = "full-control" | "traffic-light" | "read-only" | "no-interface";
|
|
7266
|
+
/**
|
|
7267
|
+
* Which tier does this brand actually reach?
|
|
7268
|
+
*
|
|
7269
|
+
* Checked best-first, and a tier is only reached when EVERY one of its
|
|
7270
|
+
* requirements is present — partial credit would be the whole point missed. A
|
|
7271
|
+
* fleet that cannot be read at all is `no-interface`, which is what the
|
|
7272
|
+
* coordinator uses to refuse to plan around it.
|
|
7273
|
+
*/
|
|
7274
|
+
declare function robotTier(capabilities: TRobotCapabilities | null | undefined): TRobotTier;
|
|
7275
|
+
/** What a brand is missing before it reaches a given tier. */
|
|
7276
|
+
declare function missingForTier(capabilities: TRobotCapabilities | null | undefined, tier: Exclude<TRobotTier, "no-interface">): TRobotCapability[];
|
|
7277
|
+
/**
|
|
7278
|
+
* May a screen offer this action for this brand?
|
|
7279
|
+
*
|
|
7280
|
+
* The single question every screen asks. A brand that cannot pause a process
|
|
7281
|
+
* must not be shown a Pause button that would fail — and with several brands on
|
|
7282
|
+
* one site, "which buttons exist" stops being a property of the screen and
|
|
7283
|
+
* becomes a property of the robot in front of you.
|
|
7284
|
+
*/
|
|
7285
|
+
declare function supports(capabilities: TRobotCapabilities | null | undefined, capability: TRobotCapability): boolean;
|
|
7286
|
+
/**
|
|
7287
|
+
* Open-RMF: a shared space may contain AT MOST ONE fleet it cannot control,
|
|
7288
|
+
* and "having none is ideal".
|
|
7289
|
+
*
|
|
7290
|
+
* Two uncontrollable fleets in one building is the case the book says makes
|
|
7291
|
+
* deadlock avoidance nearly impossible. This is the check that stops a site
|
|
7292
|
+
* quietly arriving there — a cleaning fleet that is read-only plus a security
|
|
7293
|
+
* robot with no interface is exactly the combination to refuse.
|
|
7294
|
+
*/
|
|
7295
|
+
declare function uncontrollableFleetWarning(tiers: readonly TRobotTier[]): {
|
|
7296
|
+
ok: boolean;
|
|
7297
|
+
count: number;
|
|
7298
|
+
message: string;
|
|
7299
|
+
};
|
|
7300
|
+
type TAdapterRobot = {
|
|
7301
|
+
/** The brand's own identifier for this machine. */
|
|
7302
|
+
robotSn: string;
|
|
7303
|
+
name?: string;
|
|
7304
|
+
model?: string;
|
|
7305
|
+
online: boolean;
|
|
7306
|
+
/** Our normalised vocabulary, not the brand's status number. */
|
|
7307
|
+
mode: string;
|
|
7308
|
+
/** The brand's own label, kept so support can quote it. */
|
|
7309
|
+
statusName?: string;
|
|
7310
|
+
batteryPercent?: number | null;
|
|
7311
|
+
floorNo?: number | null;
|
|
7312
|
+
floorKnown?: boolean;
|
|
7313
|
+
position?: {
|
|
7314
|
+
x: number;
|
|
7315
|
+
y: number;
|
|
7316
|
+
theta: number;
|
|
7317
|
+
} | null;
|
|
7318
|
+
};
|
|
7319
|
+
type TAdapterCommand = {
|
|
7320
|
+
kind: "full";
|
|
7321
|
+
} | {
|
|
7322
|
+
kind: "area";
|
|
7323
|
+
areas: string[];
|
|
7324
|
+
} | {
|
|
7325
|
+
kind: "spot";
|
|
7326
|
+
points: Array<{
|
|
7327
|
+
x: number;
|
|
7328
|
+
y: number;
|
|
7329
|
+
}>;
|
|
7330
|
+
} | {
|
|
7331
|
+
kind: "return";
|
|
7332
|
+
} | {
|
|
7333
|
+
kind: "pause";
|
|
7334
|
+
} | {
|
|
7335
|
+
kind: "resume";
|
|
7336
|
+
} | {
|
|
7337
|
+
kind: "cancel";
|
|
7338
|
+
} | {
|
|
7339
|
+
kind: "navigate";
|
|
7340
|
+
x: number;
|
|
7341
|
+
y: number;
|
|
7342
|
+
theta?: number;
|
|
7343
|
+
} | {
|
|
7344
|
+
kind: "relocalize";
|
|
7345
|
+
floorNo: number;
|
|
7346
|
+
x: number;
|
|
7347
|
+
y: number;
|
|
7348
|
+
theta: number;
|
|
7349
|
+
};
|
|
7350
|
+
/**
|
|
7351
|
+
* What every brand's adapter must provide.
|
|
7352
|
+
*
|
|
7353
|
+
* Only `brand`, `capabilities`, `listRobots` and `getRobot` are required — a
|
|
7354
|
+
* brand that can do no more than report where its robots are is still worth
|
|
7355
|
+
* having on the screen, and saying so honestly is better than excluding it.
|
|
7356
|
+
* Everything else is optional and must be guarded with `supports()` before use.
|
|
7357
|
+
*/
|
|
7358
|
+
type TRobotAdapter = {
|
|
7359
|
+
/** Stable key stored on the robot record, e.g. "ounitech". */
|
|
7360
|
+
brand: string;
|
|
7361
|
+
/** Human-facing name for a settings screen. */
|
|
7362
|
+
displayName: string;
|
|
7363
|
+
capabilities: TRobotCapabilities;
|
|
7364
|
+
listRobots(): Promise<TAdapterRobot[]>;
|
|
7365
|
+
getRobot(robotSn: string): Promise<TAdapterRobot | null>;
|
|
7366
|
+
sendCommand?(robotSn: string, command: TAdapterCommand): Promise<void>;
|
|
7367
|
+
getMaps?(robotSn: string): Promise<unknown[]>;
|
|
7368
|
+
getPlans?(robotSn: string): Promise<unknown[]>;
|
|
7369
|
+
};
|
|
7370
|
+
declare function commandSupported(capabilities: TRobotCapabilities | null | undefined, kind: TAdapterCommand["kind"]): boolean;
|
|
7371
|
+
/** Register a brand. Re-registering replaces, so a test can swap one in. */
|
|
7372
|
+
declare function registerRobotAdapter(adapter: TRobotAdapter): void;
|
|
7373
|
+
/**
|
|
7374
|
+
* The adapter for a brand, or null.
|
|
7375
|
+
*
|
|
7376
|
+
* Null rather than a throw, and never a default: silently falling back to one
|
|
7377
|
+
* brand's adapter would send another brand's robot a command in a protocol it
|
|
7378
|
+
* does not speak.
|
|
7379
|
+
*/
|
|
7380
|
+
declare function robotAdapterFor(brand: unknown): TRobotAdapter | null;
|
|
7381
|
+
/** Every registered brand, for a settings screen's picker. */
|
|
7382
|
+
declare function registeredRobotBrands(): Array<{
|
|
7383
|
+
brand: string;
|
|
7384
|
+
displayName: string;
|
|
7385
|
+
tier: TRobotTier;
|
|
7386
|
+
}>;
|
|
7387
|
+
/** Test seam. */
|
|
7388
|
+
declare function clearRobotAdapters(): void;
|
|
7389
|
+
|
|
7220
7390
|
/**
|
|
7221
7391
|
* The lift contract, shaped after Open-RMF's `rmf_lift_msgs`.
|
|
7222
7392
|
*
|
|
@@ -7392,6 +7562,255 @@ declare function createLiftSimulator(options: {
|
|
|
7392
7562
|
state: TLiftState;
|
|
7393
7563
|
};
|
|
7394
7564
|
|
|
7565
|
+
/**
|
|
7566
|
+
* The building map: a floor plan, and the 3D layout generated from it.
|
|
7567
|
+
*
|
|
7568
|
+
* Open-RMF's `traffic_editor` annotates a floor plan with walls, floors, doors
|
|
7569
|
+
* and waypoints, and `building_map_generator` turns that annotation into a 3D
|
|
7570
|
+
* world — "the script parses the .building.yaml file and generates meshes for
|
|
7571
|
+
* the flooring and walls for each level". This is the same model, typed, with
|
|
7572
|
+
* the generation step producing plain geometry a browser can draw instead of a
|
|
7573
|
+
* Gazebo `.world`.
|
|
7574
|
+
*
|
|
7575
|
+
* The shape is taken from a real `office.building.yaml` in `open-rmf/rmf_demos`,
|
|
7576
|
+
* not invented: levels carry a `drawing`, an `elevation` and offsets; vertices
|
|
7577
|
+
* are pixel coordinates; walls and doors are pairs of vertex indices; floors are
|
|
7578
|
+
* polygons of vertex indices; a `measurement` between two vertices sets the
|
|
7579
|
+
* level's scale. Keeping that shape means a map made here can be exported to
|
|
7580
|
+
* RMF, and one made in `traffic_editor` can be read here.
|
|
7581
|
+
*
|
|
7582
|
+
* ## Two things this file exists to get right
|
|
7583
|
+
*
|
|
7584
|
+
* **Scale.** Everything downstream is metres — where a robot is, how far it has
|
|
7585
|
+
* to travel, how big a room is. A floor plan is pixels. `traffic_editor`
|
|
7586
|
+
* defaults to 1px = 5cm and expects a real measurement to correct it, and
|
|
7587
|
+
* Ounitech's maps carry their own `resolution` in metres per pixel. Get this
|
|
7588
|
+
* wrong and a building is silently the wrong size.
|
|
7589
|
+
*
|
|
7590
|
+
* **Automatic generation.** The owner's requirement is that uploading a floor
|
|
7591
|
+
* plan produces a 3D layout without anyone drawing walls by hand. A SLAM
|
|
7592
|
+
* occupancy grid — which is exactly what the cleaning robot's map PNG is —
|
|
7593
|
+
* already marks walls as dark pixels, so they can be traced rather than
|
|
7594
|
+
* annotated. `wallsFromOccupancyGrid` does that.
|
|
7595
|
+
*/
|
|
7596
|
+
/**
|
|
7597
|
+
* `traffic_editor`: "By default, the walls are of thickness of 10cm and height
|
|
7598
|
+
* 2.5m." Matched so a layout generated here and one generated by
|
|
7599
|
+
* `building_map_generator` describe the same building.
|
|
7600
|
+
*/
|
|
7601
|
+
declare const WALL_HEIGHT_M = 2.5;
|
|
7602
|
+
declare const WALL_THICKNESS_M = 0.1;
|
|
7603
|
+
/** `traffic_editor`'s default before a measurement is taken: 1px = 5cm. */
|
|
7604
|
+
declare const DEFAULT_SCALE_M_PER_PX = 0.05;
|
|
7605
|
+
/** A point on the drawing, in PIXELS, as `traffic_editor` stores it. */
|
|
7606
|
+
type TMapVertex = {
|
|
7607
|
+
x: number;
|
|
7608
|
+
y: number;
|
|
7609
|
+
/** Height above the level's own floor, in metres. Almost always 0. */
|
|
7610
|
+
z?: number;
|
|
7611
|
+
name?: string;
|
|
7612
|
+
/** RMF waypoint flags. `isCleaningZone` is the Clean Task's own marker. */
|
|
7613
|
+
isCharger?: boolean;
|
|
7614
|
+
isParkingSpot?: boolean;
|
|
7615
|
+
isHoldingPoint?: boolean;
|
|
7616
|
+
isCleaningZone?: boolean;
|
|
7617
|
+
/** Radians, for a vertex that also carries an orientation (a dock). */
|
|
7618
|
+
theta?: number;
|
|
7619
|
+
};
|
|
7620
|
+
/** Two vertex indices. Walls, doors and measurements are all this shape. */
|
|
7621
|
+
type TMapSegment = {
|
|
7622
|
+
start: number;
|
|
7623
|
+
end: number;
|
|
7624
|
+
};
|
|
7625
|
+
type TMapWall = TMapSegment & {
|
|
7626
|
+
heightM?: number;
|
|
7627
|
+
thicknessM?: number;
|
|
7628
|
+
};
|
|
7629
|
+
type TMapDoor = TMapSegment & {
|
|
7630
|
+
name: string;
|
|
7631
|
+
type: "hinged" | "double_hinged" | "sliding" | "double_sliding";
|
|
7632
|
+
};
|
|
7633
|
+
/** A polygon of vertex indices. `hole: true` cuts it out — a lift shaft. */
|
|
7634
|
+
type TMapFloor = {
|
|
7635
|
+
vertices: number[];
|
|
7636
|
+
hole?: boolean;
|
|
7637
|
+
};
|
|
7638
|
+
/** Two vertices whose real separation is known, which sets the level's scale. */
|
|
7639
|
+
type TMapMeasurement = TMapSegment & {
|
|
7640
|
+
distanceM: number;
|
|
7641
|
+
};
|
|
7642
|
+
type TFloorPlanLevel = {
|
|
7643
|
+
name: string;
|
|
7644
|
+
/** Height of this level above the ground, in metres. */
|
|
7645
|
+
elevationM: number;
|
|
7646
|
+
/** The floor plan image. */
|
|
7647
|
+
drawing?: {
|
|
7648
|
+
fileKey?: string;
|
|
7649
|
+
url?: string;
|
|
7650
|
+
widthPx?: number;
|
|
7651
|
+
heightPx?: number;
|
|
7652
|
+
};
|
|
7653
|
+
/** Metres per pixel. */
|
|
7654
|
+
scaleMPerPx: number;
|
|
7655
|
+
/** Where the drawing's origin sits in the site frame, in metres. */
|
|
7656
|
+
originXM: number;
|
|
7657
|
+
originYM: number;
|
|
7658
|
+
vertices: TMapVertex[];
|
|
7659
|
+
walls: TMapWall[];
|
|
7660
|
+
floors: TMapFloor[];
|
|
7661
|
+
doors: TMapDoor[];
|
|
7662
|
+
measurements: TMapMeasurement[];
|
|
7663
|
+
};
|
|
7664
|
+
type TFloorPlanMap = {
|
|
7665
|
+
name: string;
|
|
7666
|
+
levels: TFloorPlanLevel[];
|
|
7667
|
+
lifts: Array<{
|
|
7668
|
+
name: string;
|
|
7669
|
+
levels: string[];
|
|
7670
|
+
x?: number;
|
|
7671
|
+
y?: number;
|
|
7672
|
+
}>;
|
|
7673
|
+
};
|
|
7674
|
+
/**
|
|
7675
|
+
* Metres per pixel, from a measurement drawn across something of known size.
|
|
7676
|
+
*
|
|
7677
|
+
* This is how `traffic_editor` turns a drawing into a building: you draw a line
|
|
7678
|
+
* on a scale bar and type what it really is. Refuses rather than returning a
|
|
7679
|
+
* nonsense scale — a zero or negative one silently makes every distance in the
|
|
7680
|
+
* building wrong, and wrong-by-a-factor is far harder to notice than an error.
|
|
7681
|
+
*/
|
|
7682
|
+
declare function scaleFromMeasurement(pixelDistance: number, realDistanceM: number): number;
|
|
7683
|
+
/** The pixel distance between two vertices. */
|
|
7684
|
+
declare function vertexDistancePx(a: TMapVertex, b: TMapVertex): number;
|
|
7685
|
+
/**
|
|
7686
|
+
* A level's scale, taken from its first usable measurement.
|
|
7687
|
+
*
|
|
7688
|
+
* Falls back to the level's declared scale, then to `traffic_editor`'s 1px=5cm.
|
|
7689
|
+
* The fallback is deliberate and matches the editor: a drawing with no
|
|
7690
|
+
* measurement is still worth showing, it is just not yet trustworthy for
|
|
7691
|
+
* distances.
|
|
7692
|
+
*/
|
|
7693
|
+
declare function levelScale(level: TFloorPlanLevel): number;
|
|
7694
|
+
/**
|
|
7695
|
+
* A drawing pixel in site metres.
|
|
7696
|
+
*
|
|
7697
|
+
* The vertical flip is the occupancy-grid convention: image origin top-left,
|
|
7698
|
+
* map origin bottom-left. `imageHeightPx` is required for that reason — without
|
|
7699
|
+
* it a building comes out mirrored, which reads as "the robot is in the wrong
|
|
7700
|
+
* room" rather than as a bug in a transform.
|
|
7701
|
+
*/
|
|
7702
|
+
declare function levelPixelToMetres(level: TFloorPlanLevel, px: number, py: number, imageHeightPx: number): {
|
|
7703
|
+
x: number;
|
|
7704
|
+
y: number;
|
|
7705
|
+
};
|
|
7706
|
+
/** A wall as a box a renderer can place: centre, size and rotation. */
|
|
7707
|
+
type TWallSolid = {
|
|
7708
|
+
centre: {
|
|
7709
|
+
x: number;
|
|
7710
|
+
y: number;
|
|
7711
|
+
z: number;
|
|
7712
|
+
};
|
|
7713
|
+
lengthM: number;
|
|
7714
|
+
thicknessM: number;
|
|
7715
|
+
heightM: number;
|
|
7716
|
+
/** Rotation about the vertical axis, radians. */
|
|
7717
|
+
yaw: number;
|
|
7718
|
+
};
|
|
7719
|
+
/** A floor as a polygon in metres, at the level's elevation. */
|
|
7720
|
+
type TFloorSlab = {
|
|
7721
|
+
points: Array<{
|
|
7722
|
+
x: number;
|
|
7723
|
+
y: number;
|
|
7724
|
+
}>;
|
|
7725
|
+
elevationM: number;
|
|
7726
|
+
hole: boolean;
|
|
7727
|
+
};
|
|
7728
|
+
type TLevelSolids = {
|
|
7729
|
+
level: string;
|
|
7730
|
+
elevationM: number;
|
|
7731
|
+
walls: TWallSolid[];
|
|
7732
|
+
floors: TFloorSlab[];
|
|
7733
|
+
};
|
|
7734
|
+
/**
|
|
7735
|
+
* Turn a level's annotation into the geometry a 3D view draws.
|
|
7736
|
+
*
|
|
7737
|
+
* This is `building_map_generator`'s job — "generates meshes for the flooring
|
|
7738
|
+
* and walls for each level" — reduced to what a browser needs: boxes and
|
|
7739
|
+
* polygons. No meshes, no textures, no SDF; a renderer can extrude these
|
|
7740
|
+
* directly.
|
|
7741
|
+
*
|
|
7742
|
+
* A zero-length wall is skipped rather than emitted: two annotations on the same
|
|
7743
|
+
* vertex would otherwise produce a degenerate box, which renders as a flickering
|
|
7744
|
+
* artefact that looks like a graphics fault rather than a map mistake.
|
|
7745
|
+
*/
|
|
7746
|
+
declare function levelSolids(level: TFloorPlanLevel, imageHeightPx: number): TLevelSolids;
|
|
7747
|
+
/** Every level's geometry, for a whole-building view. */
|
|
7748
|
+
declare function buildingSolids(map: TFloorPlanMap, imageHeightFor: (level: TFloorPlanLevel) => number): TLevelSolids[];
|
|
7749
|
+
type TOccupancyGrid = {
|
|
7750
|
+
/** One value per pixel, row-major. Lower is darker. */
|
|
7751
|
+
data: ArrayLike<number>;
|
|
7752
|
+
width: number;
|
|
7753
|
+
height: number;
|
|
7754
|
+
};
|
|
7755
|
+
/**
|
|
7756
|
+
* Trace walls straight out of a floor-plan image, so no one has to draw them.
|
|
7757
|
+
*
|
|
7758
|
+
* The requirement is that uploading a floor plan produces a 3D layout by itself.
|
|
7759
|
+
* A SLAM occupancy grid — which is exactly what the cleaning robot's map PNG is
|
|
7760
|
+
* — already marks occupied space as dark pixels, so the walls are in the image
|
|
7761
|
+
* and only need tracing.
|
|
7762
|
+
*
|
|
7763
|
+
* Horizontal runs are taken first, then vertical runs from whatever the
|
|
7764
|
+
* horizontal pass did not already cover, so a long wall becomes one segment
|
|
7765
|
+
* rather than a segment per pixel.
|
|
7766
|
+
*
|
|
7767
|
+
* ponytail: a raster run-length pass, not a vectoriser. It finds axis-aligned
|
|
7768
|
+
* walls, which is nearly all of them in a building, and approximates a diagonal
|
|
7769
|
+
* as a staircase. If diagonal walls or curved atria ever matter, the upgrade is
|
|
7770
|
+
* a proper contour trace (marching squares plus Douglas-Peucker) behind this
|
|
7771
|
+
* same signature.
|
|
7772
|
+
*/
|
|
7773
|
+
declare function wallsFromOccupancyGrid(grid: TOccupancyGrid, options?: {
|
|
7774
|
+
/** A pixel at or below this value is occupied. */
|
|
7775
|
+
threshold?: number;
|
|
7776
|
+
/** Runs shorter than this are noise, not walls. In pixels. */
|
|
7777
|
+
minRunPx?: number;
|
|
7778
|
+
}): {
|
|
7779
|
+
vertices: TMapVertex[];
|
|
7780
|
+
walls: TMapWall[];
|
|
7781
|
+
};
|
|
7782
|
+
/**
|
|
7783
|
+
* Build a building map from the cleaning robot's floor maps.
|
|
7784
|
+
*
|
|
7785
|
+
* The vendor already holds most of it: one map per floor, each with a floor
|
|
7786
|
+
* plan image, a metres-per-pixel resolution, an origin, its cleaning areas and
|
|
7787
|
+
* the dock's pose. Reading that into the RMF shape means a site is mapped the
|
|
7788
|
+
* moment its robot is, with nobody re-drawing anything.
|
|
7789
|
+
*
|
|
7790
|
+
* Walls are left empty here. They come from `wallsFromOccupancyGrid` against the
|
|
7791
|
+
* downloaded image, which needs the pixels and therefore cannot happen in a pure
|
|
7792
|
+
* function — keeping them separate is what lets this one be tested without a
|
|
7793
|
+
* network.
|
|
7794
|
+
*/
|
|
7795
|
+
declare function buildingMapFromRobotMaps(name: string, maps: Array<{
|
|
7796
|
+
floorNo: number;
|
|
7797
|
+
mapName?: string;
|
|
7798
|
+
backgroundFileKey?: string;
|
|
7799
|
+
resolution?: number;
|
|
7800
|
+
originX?: number;
|
|
7801
|
+
originY?: number;
|
|
7802
|
+
baseX?: number;
|
|
7803
|
+
baseY?: number;
|
|
7804
|
+
baseTheta?: number;
|
|
7805
|
+
areaList?: Array<{
|
|
7806
|
+
areaName: string;
|
|
7807
|
+
x: number;
|
|
7808
|
+
y: number;
|
|
7809
|
+
}>;
|
|
7810
|
+
}>,
|
|
7811
|
+
/** Metres between floors, where the robot's maps do not say. */
|
|
7812
|
+
floorHeightM?: number): TFloorPlanMap;
|
|
7813
|
+
|
|
7395
7814
|
/**
|
|
7396
7815
|
* The cleaning-robot cloud's HTTP API.
|
|
7397
7816
|
*
|
|
@@ -7615,6 +8034,48 @@ declare function useRobotFleetService(deps?: {
|
|
|
7615
8034
|
getPlans: (robot: TStoredRobot) => Promise<TCloudPlan[]>;
|
|
7616
8035
|
};
|
|
7617
8036
|
|
|
8037
|
+
/**
|
|
8038
|
+
* Ounitech (Q3-G / Q3-W) — the first brand behind the vendor-neutral contract.
|
|
8039
|
+
*
|
|
8040
|
+
* Everything Ounitech-specific stops here. The screens, the dispatcher and the
|
|
8041
|
+
* lift coordinator speak `TRobotAdapter`, so adding a second brand is a new file
|
|
8042
|
+
* beside this one rather than a change to any of them.
|
|
8043
|
+
*
|
|
8044
|
+
* ## The capability declaration is the honest bit
|
|
8045
|
+
*
|
|
8046
|
+
* It says what their **documented API** does, not what their app can do. Their
|
|
8047
|
+
* app has Move to Target Point, Set Origin, pause/resume/cancel and cleaning
|
|
8048
|
+
* records; none of those are in the API document we were given, so none are
|
|
8049
|
+
* claimed here. Claiming them would put buttons on screens that fail when
|
|
8050
|
+
* pressed.
|
|
8051
|
+
*
|
|
8052
|
+
* On Open-RMF's scale this lands at **no-interface** — it does not reach even
|
|
8053
|
+
* Read Only, because that tier also wants battery and path/ETA. That is not a
|
|
8054
|
+
* criticism of the robot, which is clearly capable; it is a statement about the
|
|
8055
|
+
* API surface, and it is exactly the gap the vendor questions ask them to close.
|
|
8056
|
+
* When they answer, flip the flags here and every screen adapts on its own.
|
|
8057
|
+
*/
|
|
8058
|
+
declare const OUNITECH_BRAND = "ounitech";
|
|
8059
|
+
declare const OUNITECH_CAPABILITIES: TRobotCapabilities;
|
|
8060
|
+
/**
|
|
8061
|
+
* Build an adapter bound to one estate's credentials.
|
|
8062
|
+
*
|
|
8063
|
+
* Credentials belong to the robot record, so an adapter instance is per-estate
|
|
8064
|
+
* rather than global — which is also what stops one client's request ever being
|
|
8065
|
+
* signed with another client's secret.
|
|
8066
|
+
*/
|
|
8067
|
+
declare function createOunitechAdapter(credentials: TRobotCloudCredentials, options?: {
|
|
8068
|
+
baseUrl?: string;
|
|
8069
|
+
}): TRobotAdapter;
|
|
8070
|
+
/**
|
|
8071
|
+
* Register a placeholder so the brand appears in a settings picker before any
|
|
8072
|
+
* estate has credentials.
|
|
8073
|
+
*
|
|
8074
|
+
* Its read methods refuse rather than return an empty list: an empty list says
|
|
8075
|
+
* "this estate has no robots", which is a different and misleading answer.
|
|
8076
|
+
*/
|
|
8077
|
+
declare function registerOunitechBrand(): void;
|
|
8078
|
+
|
|
7618
8079
|
/**
|
|
7619
8080
|
* The fleet endpoints: everything about a robot that lives in the vendor cloud.
|
|
7620
8081
|
*
|
|
@@ -16419,4 +16880,4 @@ declare function usePersonalEmergencyChainController(): {
|
|
|
16419
16880
|
update: (req: Request, res: Response, next: NextFunction) => Promise<void>;
|
|
16420
16881
|
};
|
|
16421
16882
|
|
|
16422
|
-
export { ANPRMode, APP_BASE_URLS, AUDIT_VALUE_MAX_LENGTH, AccessTypeProps, AppKey, AppServiceType, AssignCardConfig, BLOCKLIST_CATEGORIES, BULK_CAMERA_COLUMNS, BidStatus, BidType, BuildingLevelStatus, BuildingStatus, BulkCameraAccepted, BulkCameraOutcome, BulkCameraPlan, BulkCameraResult, BulkCardUpdate, BulletinOrder, BulletinRecipient, BulletinSort, BulletinStatus, BulletinVideoOrder, BulletinVideoSort, CAMERA_ANPR_PERMISSIONS, CAMERA_CAPABILITIES, CAMERA_CAPABILITY_REASONS, CAMERA_MANAGE_ANY_PERMISSIONS, CAMERA_NOT_PATROL_OR_CCTV, CAMERA_NO_SUB_STREAM_TTL_SECONDS, CAMERA_PTZ_PERMISSIONS, CAMERA_RECORDINGS_PERMISSIONS, CAMERA_REQUEST_TIMEOUT_MS, CAMERA_RTSP_TIMEOUT_MS, CAMERA_SETUP_PERMISSIONS, CAMERA_SNAPSHOT_CACHE_SECONDS, CAMERA_SNAPSHOT_MAX_BYTES, CAMERA_TEST_MIN_INTERVAL_SECONDS, CAMERA_TEST_ROUND_LIMIT, CAMERA_TEST_ROUND_SECONDS, CAMERA_TYPE_ANPR, CAMERA_TYPE_IP, CAMERA_VIEW_PERMISSIONS, CLIENT_ACTIONS, CLOCK_DRIFT_WARN_SECONDS, CONSOLE_AUDIT_LABELS, CONSOLE_PERMISSIONS, CONTRACTOR_TYPE_LABELS, CROSS_CLIENT_GRANT, CURRENT_TIME_ENDPOINT, Camera, CameraAddressInput, CameraCapability, CameraCapabilityContext, CameraCapabilityDescriptor, CameraCapabilityEntry, CameraCapabilityReason, CameraCapabilityState, CameraCapabilityTrace, CameraDevice, CameraFrame, CameraMembership, CameraStream, CameraTestStatus, CameraTransport, CameraType, ConsoleAuditAction, ConsoleAuditTarget, ConsoleGrant, DEFAULT_RING_SECONDS, DEFAULT_SITE_TIMEZONE, DEVICE_STATUS, DOBStatus, DUPLICATE_TERMS_VERSION_MESSAGE, DayOfWeek, DeviceHttpTarget, DeviceProbeResult, DynamicFormFields, E164, EAccessCardTypes, EAccessCardUserTypes, EmailSender, EntryOrder, EntrySort, EventOrder, EventSort, EventStatus, EventType, FacilitySort, FacilityStatus, FormEntryStatus, GOVERNED_MODULES, GuestSort, GuestStatus, HID_CARD_VALUE_FACTOR, HID_PERMISSION_CATEGORIES, HID_UINT32_MAX, HID_UINT64_MAX, HidRawUint64, IAccessCard, IAccessCardTransaction, InviteActor, LIFT_DOOR, LIFT_MODE, LIFT_MOTION, LIFT_REQUEST, LIVE_ROLE, LIVE_VEHICLE_STATUSES, MANAGE_SITE_MODULES, MAX_BULK_CAMERA_ROWS, MAX_CAMERA_CHANNEL, MAX_CAMERA_NAME_LENGTH, MAX_PERSONAL_EMERGENCY_CONTACTS, MAX_RING_SECONDS, MAccessCard, MAccessCardTransaction, MAddress, MAttendance, MAttendanceSettings, MBidPreloved, MBillingConfiguration, MBillingItem, MBuilding, MBuildingLevel, MBuildingUnit, MBulletinBoard, MBulletinVideo, MCategoryPreloved, MChannelPreloved, MChat, MChatPreloved, MConsoleAudit, MCustomer, MCustomerSite, MDocumentManagement, MEMBER_TYPES, MEntryPassSettings, MEventManagement, MFeedback, MFile, MFormEntry, MGuestManagement, MHidAmicoEvent, MHidAmicoIdentity, MHidAmicoReader, MHidSipAccount, MHidSitePermissions, MIN_RING_SECONDS, MIncidentReport, MManpowerDesignations, MManpowerMonitoring, MManpowerRemarks, MManpowerSites, MMember, MNfcPatrolLog, MNfcPatrolRoute, MNfcPatrolSettings, MNfcPatrolSettingsUpdate, MNfcPatrolTag, MNotification, MNotificationPreference, MODULE_GATE_MODE_DEFAULT, MODULE_LIST_GATE_DEFAULT, MOccurrenceBook, MOccurrenceEntry, MOccurrenceSubject, MOnlineForm, MOrg, MOvernightParkingApprovalHours, MOvernightParkingRequest, MPatrolEmail, MPatrolLog, MPatrolQuestion, MPatrolRoute, MPerson, MPersonalEmergencyChain, MPlatformTerms, MPost, MPostFavorite, MPromoCode, MRobot, MRole, MRoleV2, MServiceProvider, MServiceProviderBilling, MSession, MSite, MSiteCamera, MSiteFacility, MSiteFacilityBooking, MStatementOfAccount, MSubcategoryPreloved, MSubscription, MSubscriptionPlan, MUnitBilling, MUser, MVehicle, MVehicleTransaction, MVerification, MVerificationV2, MVisitorTransaction, MWorkOrder, NOTIFICATION_CATEGORIES, NOTIFICATION_CHANNELS, NOTIFICATION_CHANNEL_LABELS, NOTIFICATION_NAMESPACE, NOTIFY_ACCESS_FILTER_DEFAULT, NotificationAppSlug, NotificationCategory, NotificationChannel, NotificationModule, NotificationPreferenceView, NotificationService, ORG_MARKETPLACE_VENDOR_FIELD, ORG_OWNER_REPAIR_CLAIM_STALE_MS, ORG_OWNER_REPAIR_CLAIM_TAKEN_REASON, ORG_OWNER_REPAIR_DEFAULT, ORG_OWNER_REPAIR_OFF_REASON, OrgNature, OvernightParkingRequestSort, OvernightParkingRequestStatus, PATROL_CCTV_CAMERA_FILTER, PATROL_EMAIL_MAX_LOGS, PATROL_EMAIL_MAX_PER_HOUR, PATROL_EMAIL_MAX_RECIPIENTS, PERSON_TYPES, PLAN_RANGE, PLATFORM_STAFF_MEMBER_TYPE, PLATFORM_STAFF_ROLE_TYPE, PLAYBACK_LINK_SECONDS, PLAYBACK_MAX_WINDOW_SECONDS, PROPERTY_MANAGEMENT_MEMBER_TYPES, PStatus, PTZ_ALLOWED_ACTIONS, PTZ_ALLOWED_CODES, Period, PersonStatus, PersonType, PersonTypes, PlatformTermsStatus, PostOrder, PostSort, PostStatus, QrTagProps, REALTIME_MAX_FANOUT, REGISTERED_VEHICLE_CATEGORIES, ROBOT_APP_SCOPES, ROBOT_CLOUD_DOC_CONFIRMATIONS, ROBOT_CLOUD_PATHS, ROBOT_MODULE, ROBOT_PERMISSIONS, ROBOT_STATUS_NAMES, ROBOT_TYPES, ResidentAppModuleKey, RobotCloudError, SELF_SERVICE_RESEND_COOLDOWN_MS, SELF_SIGNUP_PLATFORM, SELF_SIGNUP_STATUS, SELF_SIGNUP_TYPES, SERVICE_PROVIDER_INVITE_LABELS, SERVICE_PROVIDER_INVITE_TRANSITIONS, SERVICE_PROVIDER_SIGN_IN_SUBJECT, SERVICE_PROVIDER_SIGN_IN_TYPE, SERVICE_PROVIDER_SIGN_UP_SUBJECT, SERVICE_PROVIDER_SIGN_UP_TYPE, SOFTWARE_VERSION_ENDPOINT, ServiceProviderInviteAction, ServiceProviderInviteDecision, ServiceProviderInviteFacts, SiteAddress, SiteCategories, SiteStatus, SortFields, SortOrder, Status, SubjectOrder, SubjectSort, SubscriptionBillingMode, SubscriptionType, TAccessMngmntSettings, TActionStatus, TAddress, TAffectedEntities, TAffectedInjured, TAppServiceType, TApprovedBy, TApprover, TAreaColour, TAttendance, TAttendanceCheckIn, TAttendanceCheckOut, TAttendanceCheckTime, TAttendanceLocation, TAttendanceSettings, TAttendanceSettingsGetBySite, TAuthorities, TAuthoritiesCalled, TBidPreloved, TBilling, TBillingConfiguration, TBillingItem, TBuilding, TBuildingLevel, TBuildingUnit, TBulletinBoard, TBulletinVideo, TCamera, TCameraHealthClaim, TCategoryPreloved, TChannelPreloved, TChat, TChatPreloved, TCheckPoint$1 as TCheckPoint, TCleanLevel, TCleanMode, TCleanOptionValues, TCleanOptions, TCleanSubMode, TCloudArea, TCloudFile, TCloudMap, TCloudPlan, TCloudPlanJob, TCloudRobot, TComplaintInfo, TComplaintReceivedTo, TConsoleAudit, TConsoleAuditQuery, TCounter, TCreateNfcPatrolLog, TCustomer, TCustomerSite, TCustomerSitePropertyField, TDayNumber, TDaySchedule, TDefaultAccessCard, TDesignations, TDocs, TDocumentCreate, TDocumentManagement, TEntryPassSettings, TEventManagement, TFeedback, TFeedbackMetadata, TFeedbackUpdate, TFeedbackUpdateCategory, TFeedbackUpdateServiceProvider, TFeedbackUpdateStatus, TFeedbackUpdateToCompleted, TFile, TFiles, TFleetRobot, TFolderUpdate, TFormEntry, TGetAttendancesByUserQuery, TGetAttendancesQuery, TGuestManagement, THidAmicoEvent, THidAmicoGatewayJob, THidAmicoIdentity, THidAmicoPhysicalCard, THidAmicoReader, THidPermissionAssignment, THidPermissionCategory, THidPermissionUserBinding, THidPhysicalCardInput, THidPhysicalCardType$1 as THidPhysicalCardType, THidSipAccount, THidSitePermissions, TIncidentInformation, TIncidentReport, TIncidentTypeAndTime, TInvoice, TKeyRef, TLiftDoorState, TLiftDriver, TLiftMode, TLiftMotionState, TLiftRequest, TLiftRequestType, TLiftState, TManpowerDesignations, TManpowerDesignationsUpdate, TManpowerMonitoring, TManpowerMonitoringUpdate, TManpowerRemarks, TManpowerRemarksStatusUpdate, TManpowerRemarksUpdate, TManpowerSearchFilter, TManpowerSites, TMember, TMemberModulesDeps, TMemberUpdateStatus, TMessagePreloved, TMiniRole, TModuleAccess, TModuleGateMode, TModuleImpact, TNfcPatrolLog, TNfcPatrolRoute, TNfcPatrolRouteEdit, TNfcPatrolSettings, TNfcPatrolSettingsGetBySite, TNfcPatrolSettingsUpdate, TNfcPatrolTag, TNfcPatrolTagConfigureReset, TNfcPatrolTagEdit, TNfcPatrolTagUpdateData, TNotification, TNotificationPreference, TNotificationPreferenceOff, TNotifyAccessContext, TNotifyAccessMode, TNotifyAccessReport, TOccurrenceBook, TOccurrenceEntry, TOccurrenceSubject, TOnlineForm, TOrg, TOrgModulesDeps, TOrgOwnerRepairClaim, TOrgOwnerRepairDeps, TOrgOwnerRepairInput, TOrgOwnerRepairPayload, TOrgOwnerRepairPlan, TOvernightParkingApprovalHours, TOvernightParkingRequest, TPatrolEmail, TPatrolEmailCreatedBy, TPatrolEmailLogRef, TPatrolLog, TPatrolQuestion, TPatrolRoute, TPerson, TPersonalEmergencyChain, TPersonalEmergencyContact, TPlaceOfIncident, TPlates, TPlatformTerms, TPost, TPostFavorite, TPrice, TPriceType, TPromoCode, TPromoCurrencyInput, TPromoTier, TRACKING_BACKOFF_BASE_MS, TRACKING_BACKOFF_CAP_MS, TRACKING_IDLE_TIMEOUT_MS, TRANSPORT_DEVICE_HTTP, TRANSPORT_RELAY_PLAYBACK, TRANSPORT_RELAY_PLAYER, TRANSPORT_RTSP_FRAME, TRecipientOfComplaint, TRemarks, TResident, TResidentAppModules, TRobot, TRobotAction, TRobotAppScope, TRobotCloudCredentials, TRobotCloudPath, TRobotCloudReply, TRobotCommand, TRobotLiveState, TRobotMetadata, TRobotMode, TRobotPermissionActor, TRobotPose, TRobotType, TRole, TRolePermissionHistoryEntry, TRoleV2, TRoute, TSOABillingItem, TSOAStatus, TSelfServiceEmailOccasion, TSelfServiceEmailRecord, TSelfServiceResendDecision, TSelfServiceResendFacts, TServiceProvider, TServiceProviderBilling, TSession, TSessionCreate, TShifts, TSignNfcPatrolLog, TSite, TSiteCamera, TSiteDayBounds, TSiteFacility, TSiteFacilityBooking, TSiteInfo, TSiteInformation, TSiteMetadata, TSiteModulesDeps, TSiteUpdateBlock, TSseEvent, TStatementOfAccount, TSubcategoryPreloved, TSubmissionForm, TSubscription, TSubscriptionPlan, TSubscriptionPlanApplication, TUnitBilling, TUnits, TUpdateFormEntry, TUpdateName, TUser, TUserCreate, TVehicle, TVehicleAnprCamera, TVehicleHistoryEntry, TVehicleTransaction, TVehicleUpdate, TVerification, TVerificationCode, TVerificationEvent, TVerificationMetadata, TVerificationMetadataV2, TVerificationOnboarding, TVerificationV2, TVisitorTransaction, TWorkOrder, TWorkOrderMetadata, TWorkOrderUpdate, TWorkOrderUpdateStatus, TWorkOrderUpdateToCompleted, TanyoneDamageToProperty, UNSTORED_COLUMNS, UseAccessManagementRepo, UserStatus, VEHICLE_HISTORY_LIMIT, VERIFICATION_OPEN_STATUSES, VehicleCategory, VehicleListView, VehicleOrder, VehicleSort, VehicleStatus, VehicleType, VerificationLinkType, VerificationStatus, VerificationSubjectType, VerificationType, VisitorSort, VisitorStatus, addressSchema, allowedFieldsSite, allowedNatures, allowedPlanApplications, allowsRobotAction, allowsRobotListing, applyTrackingFrame, areaColourToHex, attendanceSchema, attendanceSettingsSchema, buildSelfServiceEmailContext, building_level_namespace_collection, building_units_namespace_collection, buildings_namespace_collection, bulletin_boards_namespace_collection, callerAccountApproved, callerId, cameraBaseUrl, cameraCapabilitiesFor, cameraDevices, cameraGrant, cameraHealthClaim, cameraHealthSummary, cameraListClearConfirmation, cameraManagePermissions, cameraProbeCacheKey, cameraTransports, canManageSiteModules, canMonitorRobotType, canRevokeRefreshTokenFamily, canSetUpRobotType, categoriesForPermissions, categorySupportsChannel, chatPrelovedEvents, chatSchema, claimReadsAsStale, clampPtzSpeed, clockDriftSeconds, consoleRoleAllows, consoleRoleAllowsAll, consoleSpellings, console_audit_namespace_collection, createLiftSimulator, createManpowerRemarksDaily, createSseParser, customerSchema, customerSitePropertyFields, decideSelfServiceResend, decideServiceProviderInvite, decodeHidPacsCard, decodeTrackingFrame, deniedModules, deriveBulletinStatus, deriveCameraHost, describeCameraCapabilities, designationsSchema, deviceControlEnabled, deviceHttpEnabled, deviceHttpTargets, deviceHttpTimeoutMs, deviceProbeTtlSeconds, disconnectedState, emitNotificationCreated, emptyPersonalEmergencyChain, encodeHidPacsCard, entitledSiteScope, events_namespace_collection, expandModules, expiredBulletinSweepFilter, expiredVehicleSweepFilter, facility_bookings_namespace_collection, feedbackSchema, feedbacks2_namespace_collection, feedbacks_namespace_collection, ffmpegFrameArgs, ffmpegPath, filterByAccess, formatCapabilityTrace, formatDahuaDate, getIO, getSessionIdFromRequest, grabWithSubStreamFallback, guests_namespace_collection, hasAnyCapability, hasAnyPermission, hasOrgInvitation, hasOrgOwnership, hasOrgSiteReach, hexToAreaColour, hidRawUint64, holdsLift, holdsRole, incidentReport, incidentReportLog, incidents_namespace_collection, invitationOffersRole, isAvailableForWork, isCameraEntitled, isDispatchable, isDuplicateMemberError, isDuplicateVersionError, isLiftAvailable, isLikelySelfServiceEmail, isLiveVehicleStatus, isPatrolCctvCamera, isPlatformOwner, isPromoCodeExpired, isRelayPlayerUrl, isSafeRelativePath, isSafeToCross, isSeasonPassVehicle, isSuperAdmin, isTermsCurrent, isTrackingStale, isValidTimezone, listStaffUserIds, liveStatusFor, logCamera, manpowerDesignationsSchema, manpowerEvents, manpowerMonitoringSchema, manpowerRemarksSchema, manpowerSitesSchema, mapWithLimit, maskNric, memberModulesHandlers, metresToPixel, moduleDeniedForCaller, moduleGateEnforceKeys, moduleGateMode, moduleImpact, moduleListGateOn, nfcPatrolSettingsSchema, nfcPatrolSettingsSchemaUpdate, normalizeAcceptedTerms, normalizeHidCardValue, notificationAccessReport, notificationCategory, notificationCategoryLabel, notificationEvents, notificationRoom, notifyAccessMode, occasionForStatus, occurrence_book_namespace_collection, onBookTimezonesChanged, online_forms_namespace_collection, orgLevelRoles, orgModulesHandlers, orgOwnerRepairHandlers, orgOwnerRepairOn, orgQualifiesForOwnerRepair, orgSchema, overnight_parking_requests_namespace_collection, parseCameraChannel, parseCameraHost, parseDahuaFind, parseDeviceTime, parseHidJsonLossless, parsePromoExpiry, parseRobotCommand, parseSoftwareVersion, pickAuditFields, pickCustomerSiteProperties, pixelToMetres, planBulkCameraImport, planDayFromJsDay, planOrgOwnerRepair, platform_terms_namespace_collection, playbackRelays, playbackWindowRefusal, promoCodeRefusal, promoCodeSchema, promoCodeStatusSchema, promoCodeUpdate, promoCodeUpdateSchema, ptzEndpoint, publicCameraFields, readsAsApprovedAccount, recordConsoleAction, refuseServiceProviderInviteAction, registerCameraTransport, relayForRecorder, remarksSchema, renderPagePdf, requireConsolePermission, requirePlatformStaff, resetCameraTransports, residentAppModuleKeys, residentAppModulesSchema, residentFormEntry, resolutionRefusalReason, resolveCamera, resolveDeviceHttp, resolveHidPhysicalCardValue, resolveInviteActor, resolveSiteTimezone, resolveStaffRole, robotActionsFor, robotCloudBody, robotCloudSign, robotCloudSigningString, robotCloudTimestamp, robotMode, robotModeFromList, robotSchema, robotScopeForApp, robotTypesVisibleTo, rtspUrl, schema, schemaAppSlugNotification, schemaApprovedBy, schemaApprover, schemaBidPreloved, schemaBilling, schemaBillingConfiguration, schemaBillingItem, schemaBuilding, schemaBuildingLevel, schemaBuildingUnit, schemaBuildingUpdateOptions, schemaBulletinBoard, schemaBulletinVideo, schemaCategoryPreloved, schemaChannelPreloved, schemaChatPreloved, schemaConsoleAudit, schemaCreateHidAmicoIdentity, schemaCreateNfcPatrolLog, schemaCreateNotification, schemaCustomerSite, schemaDiscoverHidAmicoReader, schemaDocumentManagement, schemaEntryPassSettings, schemaEventManagement, schemaFiles, schemaFormEntry, schemaGuestManagement, schemaHidAmicoAccessLogQuery, schemaHidAmicoAssignUserCard, schemaHidAmicoConfiguration, schemaHidAmicoEnrollUserCard, schemaHidAmicoEvent, schemaHidAmicoExecuteActions, schemaHidAmicoIdentity, schemaHidAmicoIdentityIdParams, schemaHidAmicoIdentityQuery, schemaHidAmicoIntercomCall, schemaHidAmicoLogQuery, schemaHidAmicoMonitor, schemaHidAmicoNotificationParams, schemaHidAmicoObjectOperation, schemaHidAmicoOperatingMode, schemaHidAmicoReader, schemaHidAmicoReaderIdParams, schemaHidAmicoReaderListQuery, schemaHidAmicoReaderUserQuery, schemaHidAmicoSetConfiguration, schemaHidAmicoSiteIdParams, schemaHidAmicoSync, schemaHidAmicoUserCardIdParams, schemaHidAmicoUserCardParams, schemaHidAmicoUserImageParams, schemaHidAmicoUserImageUploadQuery, schemaHidAmicoUserPin, schemaHidAmicoUserPinParams, schemaHidAmicoVisitorImageParams, schemaHidAmicoVisitorImageUploadQuery, schemaHidAmicoVisitorQr, schemaHidPermissionCandidateQuery, schemaHidPermissionScopeQuery, schemaHidSipAccountRequest, schemaIncidentReport, schemaListNotification, schemaMultipleDocumentManagement, schemaNfcPatrolLog, schemaNfcPatrolRoute, schemaNfcPatrolTag, schemaNfcPatrolTagUpdateData, schemaNotification, schemaNotificationPreference, schemaNotificationPreferenceOff, schemaOccurrenceBook, schemaOccurrenceEntry, schemaOccurrenceSubject, schemaOnlineForm, schemaOvernightParkingApprovalHours, schemaOvernightParkingRequest, schemaPatrolEmail, schemaPatrolEmailCreatedBy, schemaPatrolEmailLogRef, schemaPatrolEmailQuery, schemaPatrolLog, schemaPatrolQuestion, schemaPatrolRoute, schemaPerson, schemaPersonalEmergencyContact, schemaPlate, schemaPlatformTerms, schemaPost, schemaPostFavorite, schemaResendPatrolEmail, schemaResidentSelfSignUp, schemaSelfServiceVisitor, schemaSendPatrolEmail, 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, schemaUpdateNotificationPreference, schemaUpdateOccurrenceBook, schemaUpdateOccurrenceEntry, schemaUpdateOccurrenceSubject, schemaUpdateOnlineForm, schemaUpdateOptions, schemaUpdateOvernightParkingRequest, schemaUpdatePatrolLog, schemaUpdatePatrolQuestion, schemaUpdatePatrolRoute, schemaUpdatePerson, schemaUpdatePersonalEmergencyChain, schemaUpdatePost, schemaUpdatePostFavorite, schemaUpdateServiceProviderBilling, schemaUpdateSiteBillingConfiguration, schemaUpdateSiteBillingItem, schemaUpdateSiteCamera, schemaUpdateSiteFacility, schemaUpdateSiteFacilityBooking, schemaUpdateSiteUnitBilling, schemaUpdateStatementOfAccount, schemaUpdateSubcategoryPreloved, schemaUpdateVisTrans, schemaVehicleTransaction, schemaVisitorTransaction, schemeCamera, schemeLogCamera, selectHealthTargets, selfServiceEmailSubject, servesFloor, serviceProviderInviteLabel, sessionSchema, setIO, shiftSchema, signLiveLink, signPlaybackLink, siteDayBounds, siteModulesHandlers, siteSchema, site_people_namespace_collection, snapshotEndpoint, snapshotRefusalReason, staffMayBypass, startTodaysBookForSite, stringifyHidJson, stripFacialImageMetadata, subscriptionPlanSchema, summariseBulkCameraPlan, trackingBackoffMs, 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, useConsoleAuditController, useConsoleAuditRepo, 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, useNotificationPreferenceController, useNotificationPreferenceRepo, useNotificationPreferenceService, useNotificationRepo, useOccurrenceBookController, useOccurrenceBookRepo, useOccurrenceBookService, useOccurrenceEntryController, useOccurrenceEntryRepo, useOccurrenceEntryService, useOccurrenceSubjectController, useOccurrenceSubjectRepo, useOccurrenceSubjectService, useOnlineFormController, useOnlineFormRepo, useOrgController, useOrgControllerV2, useOrgOwnerRepairRepo, useOrgRepo, useOvernightParkingController, useOvernightParkingRepo, useOvernightParkingRequestController, useOvernightParkingRequestRepo, useOvernightParkingRequestService, usePatrolEmailController, usePatrolEmailRepo, usePatrolEmailService, usePatrolLogController, usePatrolLogRepo, usePatrolLogService, usePatrolQuestionController, usePatrolQuestionRepo, usePatrolRouteController, usePatrolRouteRepo, usePersonController, usePersonRepo, usePersonalEmergencyChainController, usePersonalEmergencyChainRepo, usePersonalEmergencyChainService, usePlatformTermsController, usePlatformTermsRepo, usePlatformTermsService, usePostFavoriteController, usePostFavoriteRepo, usePostFavoriteService, usePostPrelovedController, usePostPrelovedRepo, usePriceController, usePriceModel, usePriceRepo, usePromoCodeController, usePromoCodeRepo, useRedDotPaymentController, useRedDotPaymentRepo, useRedDotPaymentSvc, useRobotCloudService, useRobotController, useRobotFleetController, useRobotFleetService, useRobotRepo, useRobotService, useRoleController, useRoleControllerV2, useRoleRepo, useRoleRepoV2, useRoleServiceV2, useServiceProviderBillingController, useServiceProviderBillingRepo, useServiceProviderBillingService, useServiceProviderController, useServiceProviderInviteController, useServiceProviderInviteService, 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, useSubscriptionPlanController, useSubscriptionPlanRepo, useSubscriptionRepo, useSubscriptionService, useUserController, useUserControllerV2, useUserRepo, useUserRepoV2, useUserService, useUserServiceV2, useVehicleController, useVehicleRepo, useVehicleService, useVerificationController, useVerificationControllerV2, useVerificationRepo, useVerificationRepoV2, useVerificationService, useVerificationServiceV2, useVisitorTransactionController, useVisitorTransactionRepo, useVisitorTransactionService, useWorkOrderController, useWorkOrderRepo, useWorkOrderService, userSchema, vehicleCategoryFor, vehicleHistoryEntry, vehicleListViewQuery, vehicleSchema, vehicleViewOf, vehicles_namespace_collection, visitorPersonRepo, visitorPersonService, visitorType, visitors_namespace_collection, wallConfig, withLiveLink, workOrderSchema, work_orders2_namespace_collection, work_orders_namespace_collection };
|
|
16883
|
+
export { ANPRMode, APP_BASE_URLS, AUDIT_VALUE_MAX_LENGTH, AccessTypeProps, AppKey, AppServiceType, AssignCardConfig, BLOCKLIST_CATEGORIES, BULK_CAMERA_COLUMNS, BidStatus, BidType, BuildingLevelStatus, BuildingStatus, BulkCameraAccepted, BulkCameraOutcome, BulkCameraPlan, BulkCameraResult, BulkCardUpdate, BulletinOrder, BulletinRecipient, BulletinSort, BulletinStatus, BulletinVideoOrder, BulletinVideoSort, CAMERA_ANPR_PERMISSIONS, CAMERA_CAPABILITIES, CAMERA_CAPABILITY_REASONS, CAMERA_MANAGE_ANY_PERMISSIONS, CAMERA_NOT_PATROL_OR_CCTV, CAMERA_NO_SUB_STREAM_TTL_SECONDS, CAMERA_PTZ_PERMISSIONS, CAMERA_RECORDINGS_PERMISSIONS, CAMERA_REQUEST_TIMEOUT_MS, CAMERA_RTSP_TIMEOUT_MS, CAMERA_SETUP_PERMISSIONS, CAMERA_SNAPSHOT_CACHE_SECONDS, CAMERA_SNAPSHOT_MAX_BYTES, CAMERA_TEST_MIN_INTERVAL_SECONDS, CAMERA_TEST_ROUND_LIMIT, CAMERA_TEST_ROUND_SECONDS, CAMERA_TYPE_ANPR, CAMERA_TYPE_IP, CAMERA_VIEW_PERMISSIONS, CLIENT_ACTIONS, CLOCK_DRIFT_WARN_SECONDS, CONSOLE_AUDIT_LABELS, CONSOLE_PERMISSIONS, CONTRACTOR_TYPE_LABELS, CROSS_CLIENT_GRANT, CURRENT_TIME_ENDPOINT, Camera, CameraAddressInput, CameraCapability, CameraCapabilityContext, CameraCapabilityDescriptor, CameraCapabilityEntry, CameraCapabilityReason, CameraCapabilityState, CameraCapabilityTrace, CameraDevice, CameraFrame, CameraMembership, CameraStream, CameraTestStatus, CameraTransport, CameraType, ConsoleAuditAction, ConsoleAuditTarget, ConsoleGrant, DEFAULT_RING_SECONDS, DEFAULT_SCALE_M_PER_PX, DEFAULT_SITE_TIMEZONE, DEVICE_STATUS, DOBStatus, DUPLICATE_TERMS_VERSION_MESSAGE, DayOfWeek, DeviceHttpTarget, DeviceProbeResult, DynamicFormFields, E164, EAccessCardTypes, EAccessCardUserTypes, EmailSender, EntryOrder, EntrySort, EventOrder, EventSort, EventStatus, EventType, FacilitySort, FacilityStatus, FormEntryStatus, GOVERNED_MODULES, GuestSort, GuestStatus, HID_CARD_VALUE_FACTOR, HID_PERMISSION_CATEGORIES, HID_UINT32_MAX, HID_UINT64_MAX, HidRawUint64, IAccessCard, IAccessCardTransaction, InviteActor, LIFT_DOOR, LIFT_MODE, LIFT_MOTION, LIFT_REQUEST, LIVE_ROLE, LIVE_VEHICLE_STATUSES, MANAGE_SITE_MODULES, MAX_BULK_CAMERA_ROWS, MAX_CAMERA_CHANNEL, MAX_CAMERA_NAME_LENGTH, MAX_PERSONAL_EMERGENCY_CONTACTS, MAX_RING_SECONDS, MAccessCard, MAccessCardTransaction, MAddress, MAttendance, MAttendanceSettings, MBidPreloved, MBillingConfiguration, MBillingItem, MBuilding, MBuildingLevel, MBuildingUnit, MBulletinBoard, MBulletinVideo, MCategoryPreloved, MChannelPreloved, MChat, MChatPreloved, MConsoleAudit, MCustomer, MCustomerSite, MDocumentManagement, MEMBER_TYPES, MEntryPassSettings, MEventManagement, MFeedback, MFile, MFormEntry, MGuestManagement, MHidAmicoEvent, MHidAmicoIdentity, MHidAmicoReader, MHidSipAccount, MHidSitePermissions, MIN_RING_SECONDS, MIncidentReport, MManpowerDesignations, MManpowerMonitoring, MManpowerRemarks, MManpowerSites, MMember, MNfcPatrolLog, MNfcPatrolRoute, MNfcPatrolSettings, MNfcPatrolSettingsUpdate, MNfcPatrolTag, MNotification, MNotificationPreference, MODULE_GATE_MODE_DEFAULT, MODULE_LIST_GATE_DEFAULT, MOccurrenceBook, MOccurrenceEntry, MOccurrenceSubject, MOnlineForm, MOrg, MOvernightParkingApprovalHours, MOvernightParkingRequest, MPatrolEmail, MPatrolLog, MPatrolQuestion, MPatrolRoute, MPerson, MPersonalEmergencyChain, MPlatformTerms, MPost, MPostFavorite, MPromoCode, MRobot, MRole, MRoleV2, MServiceProvider, MServiceProviderBilling, MSession, MSite, MSiteCamera, MSiteFacility, MSiteFacilityBooking, MStatementOfAccount, MSubcategoryPreloved, MSubscription, MSubscriptionPlan, MUnitBilling, MUser, MVehicle, MVehicleTransaction, MVerification, MVerificationV2, MVisitorTransaction, MWorkOrder, NOTIFICATION_CATEGORIES, NOTIFICATION_CHANNELS, NOTIFICATION_CHANNEL_LABELS, NOTIFICATION_NAMESPACE, NOTIFY_ACCESS_FILTER_DEFAULT, NotificationAppSlug, NotificationCategory, NotificationChannel, NotificationModule, NotificationPreferenceView, NotificationService, ORG_MARKETPLACE_VENDOR_FIELD, ORG_OWNER_REPAIR_CLAIM_STALE_MS, ORG_OWNER_REPAIR_CLAIM_TAKEN_REASON, ORG_OWNER_REPAIR_DEFAULT, ORG_OWNER_REPAIR_OFF_REASON, OUNITECH_BRAND, OUNITECH_CAPABILITIES, OrgNature, OvernightParkingRequestSort, OvernightParkingRequestStatus, PATROL_CCTV_CAMERA_FILTER, PATROL_EMAIL_MAX_LOGS, PATROL_EMAIL_MAX_PER_HOUR, PATROL_EMAIL_MAX_RECIPIENTS, PERSON_TYPES, PLAN_RANGE, PLATFORM_STAFF_MEMBER_TYPE, PLATFORM_STAFF_ROLE_TYPE, PLAYBACK_LINK_SECONDS, PLAYBACK_MAX_WINDOW_SECONDS, PROPERTY_MANAGEMENT_MEMBER_TYPES, PStatus, PTZ_ALLOWED_ACTIONS, PTZ_ALLOWED_CODES, Period, PersonStatus, PersonType, PersonTypes, PlatformTermsStatus, PostOrder, PostSort, PostStatus, QrTagProps, REALTIME_MAX_FANOUT, REGISTERED_VEHICLE_CATEGORIES, ROBOT_APP_SCOPES, ROBOT_CAPABILITIES, ROBOT_CLOUD_DOC_CONFIRMATIONS, ROBOT_CLOUD_PATHS, ROBOT_MODULE, ROBOT_PERMISSIONS, ROBOT_STATUS_NAMES, ROBOT_TYPES, ResidentAppModuleKey, RobotCloudError, SELF_SERVICE_RESEND_COOLDOWN_MS, SELF_SIGNUP_PLATFORM, SELF_SIGNUP_STATUS, SELF_SIGNUP_TYPES, SERVICE_PROVIDER_INVITE_LABELS, SERVICE_PROVIDER_INVITE_TRANSITIONS, SERVICE_PROVIDER_SIGN_IN_SUBJECT, SERVICE_PROVIDER_SIGN_IN_TYPE, SERVICE_PROVIDER_SIGN_UP_SUBJECT, SERVICE_PROVIDER_SIGN_UP_TYPE, SOFTWARE_VERSION_ENDPOINT, ServiceProviderInviteAction, ServiceProviderInviteDecision, ServiceProviderInviteFacts, SiteAddress, SiteCategories, SiteStatus, SortFields, SortOrder, Status, SubjectOrder, SubjectSort, SubscriptionBillingMode, SubscriptionType, TAccessMngmntSettings, TActionStatus, TAdapterCommand, TAdapterRobot, TAddress, TAffectedEntities, TAffectedInjured, TAppServiceType, TApprovedBy, TApprover, TAreaColour, TAttendance, TAttendanceCheckIn, TAttendanceCheckOut, TAttendanceCheckTime, TAttendanceLocation, TAttendanceSettings, TAttendanceSettingsGetBySite, TAuthorities, TAuthoritiesCalled, TBidPreloved, TBilling, TBillingConfiguration, TBillingItem, TBuilding, TBuildingLevel, TBuildingUnit, TBulletinBoard, TBulletinVideo, TCamera, TCameraHealthClaim, TCategoryPreloved, TChannelPreloved, TChat, TChatPreloved, TCheckPoint$1 as TCheckPoint, TCleanLevel, TCleanMode, TCleanOptionValues, TCleanOptions, TCleanSubMode, TCloudArea, TCloudFile, TCloudMap, TCloudPlan, TCloudPlanJob, TCloudRobot, TComplaintInfo, TComplaintReceivedTo, TConsoleAudit, TConsoleAuditQuery, TCounter, TCreateNfcPatrolLog, TCustomer, TCustomerSite, TCustomerSitePropertyField, TDayNumber, TDaySchedule, TDefaultAccessCard, TDesignations, TDocs, TDocumentCreate, TDocumentManagement, TEntryPassSettings, TEventManagement, TFeedback, TFeedbackMetadata, TFeedbackUpdate, TFeedbackUpdateCategory, TFeedbackUpdateServiceProvider, TFeedbackUpdateStatus, TFeedbackUpdateToCompleted, TFile, TFiles, TFleetRobot, TFloorPlanLevel, TFloorPlanMap, TFloorSlab, TFolderUpdate, TFormEntry, TGetAttendancesByUserQuery, TGetAttendancesQuery, TGuestManagement, THidAmicoEvent, THidAmicoGatewayJob, THidAmicoIdentity, THidAmicoPhysicalCard, THidAmicoReader, THidPermissionAssignment, THidPermissionCategory, THidPermissionUserBinding, THidPhysicalCardInput, THidPhysicalCardType$1 as THidPhysicalCardType, THidSipAccount, THidSitePermissions, TIncidentInformation, TIncidentReport, TIncidentTypeAndTime, TInvoice, TKeyRef, TLevelSolids, TLiftDoorState, TLiftDriver, TLiftMode, TLiftMotionState, TLiftRequest, TLiftRequestType, TLiftState, TManpowerDesignations, TManpowerDesignationsUpdate, TManpowerMonitoring, TManpowerMonitoringUpdate, TManpowerRemarks, TManpowerRemarksStatusUpdate, TManpowerRemarksUpdate, TManpowerSearchFilter, TManpowerSites, TMapDoor, TMapFloor, TMapMeasurement, TMapSegment, TMapVertex, TMapWall, TMember, TMemberModulesDeps, TMemberUpdateStatus, TMessagePreloved, TMiniRole, TModuleAccess, TModuleGateMode, TModuleImpact, TNfcPatrolLog, TNfcPatrolRoute, TNfcPatrolRouteEdit, TNfcPatrolSettings, TNfcPatrolSettingsGetBySite, TNfcPatrolSettingsUpdate, TNfcPatrolTag, TNfcPatrolTagConfigureReset, TNfcPatrolTagEdit, TNfcPatrolTagUpdateData, TNotification, TNotificationPreference, TNotificationPreferenceOff, TNotifyAccessContext, TNotifyAccessMode, TNotifyAccessReport, TOccupancyGrid, TOccurrenceBook, TOccurrenceEntry, TOccurrenceSubject, TOnlineForm, TOrg, TOrgModulesDeps, TOrgOwnerRepairClaim, TOrgOwnerRepairDeps, TOrgOwnerRepairInput, TOrgOwnerRepairPayload, TOrgOwnerRepairPlan, TOvernightParkingApprovalHours, TOvernightParkingRequest, TPatrolEmail, TPatrolEmailCreatedBy, TPatrolEmailLogRef, TPatrolLog, TPatrolQuestion, TPatrolRoute, TPerson, TPersonalEmergencyChain, TPersonalEmergencyContact, TPlaceOfIncident, TPlates, TPlatformTerms, TPost, TPostFavorite, TPrice, TPriceType, TPromoCode, TPromoCurrencyInput, TPromoTier, TRACKING_BACKOFF_BASE_MS, TRACKING_BACKOFF_CAP_MS, TRACKING_IDLE_TIMEOUT_MS, TRANSPORT_DEVICE_HTTP, TRANSPORT_RELAY_PLAYBACK, TRANSPORT_RELAY_PLAYER, TRANSPORT_RTSP_FRAME, TRecipientOfComplaint, TRemarks, TResident, TResidentAppModules, TRobot, TRobotAction, TRobotAdapter, TRobotAppScope, TRobotCapabilities, TRobotCapability, TRobotCloudCredentials, TRobotCloudPath, TRobotCloudReply, TRobotCommand, TRobotLiveState, TRobotMetadata, TRobotMode, TRobotPermissionActor, TRobotPose, TRobotTier, TRobotType, TRole, TRolePermissionHistoryEntry, TRoleV2, TRoute, TSOABillingItem, TSOAStatus, TSelfServiceEmailOccasion, TSelfServiceEmailRecord, TSelfServiceResendDecision, TSelfServiceResendFacts, TServiceProvider, TServiceProviderBilling, TSession, TSessionCreate, TShifts, TSignNfcPatrolLog, TSite, TSiteCamera, TSiteDayBounds, TSiteFacility, TSiteFacilityBooking, TSiteInfo, TSiteInformation, TSiteMetadata, TSiteModulesDeps, TSiteUpdateBlock, TSseEvent, TStatementOfAccount, TSubcategoryPreloved, TSubmissionForm, TSubscription, TSubscriptionPlan, TSubscriptionPlanApplication, TUnitBilling, TUnits, TUpdateFormEntry, TUpdateName, TUser, TUserCreate, TVehicle, TVehicleAnprCamera, TVehicleHistoryEntry, TVehicleTransaction, TVehicleUpdate, TVerification, TVerificationCode, TVerificationEvent, TVerificationMetadata, TVerificationMetadataV2, TVerificationOnboarding, TVerificationV2, TVisitorTransaction, TWallSolid, TWorkOrder, TWorkOrderMetadata, TWorkOrderUpdate, TWorkOrderUpdateStatus, TWorkOrderUpdateToCompleted, TanyoneDamageToProperty, UNSTORED_COLUMNS, UseAccessManagementRepo, UserStatus, VEHICLE_HISTORY_LIMIT, VERIFICATION_OPEN_STATUSES, VehicleCategory, VehicleListView, VehicleOrder, VehicleSort, VehicleStatus, VehicleType, VerificationLinkType, VerificationStatus, VerificationSubjectType, VerificationType, VisitorSort, VisitorStatus, WALL_HEIGHT_M, WALL_THICKNESS_M, addressSchema, allowedFieldsSite, allowedNatures, allowedPlanApplications, allowsRobotAction, allowsRobotListing, applyTrackingFrame, areaColourToHex, attendanceSchema, attendanceSettingsSchema, buildSelfServiceEmailContext, buildingMapFromRobotMaps, buildingSolids, building_level_namespace_collection, building_units_namespace_collection, buildings_namespace_collection, bulletin_boards_namespace_collection, callerAccountApproved, callerId, cameraBaseUrl, cameraCapabilitiesFor, cameraDevices, cameraGrant, cameraHealthClaim, cameraHealthSummary, cameraListClearConfirmation, cameraManagePermissions, cameraProbeCacheKey, cameraTransports, canManageSiteModules, canMonitorRobotType, canRevokeRefreshTokenFamily, canSetUpRobotType, categoriesForPermissions, categorySupportsChannel, chatPrelovedEvents, chatSchema, claimReadsAsStale, clampPtzSpeed, clearRobotAdapters, clockDriftSeconds, commandSupported, consoleRoleAllows, consoleRoleAllowsAll, consoleSpellings, console_audit_namespace_collection, createLiftSimulator, createManpowerRemarksDaily, createOunitechAdapter, createSseParser, customerSchema, customerSitePropertyFields, decideSelfServiceResend, decideServiceProviderInvite, decodeHidPacsCard, decodeTrackingFrame, deniedModules, deriveBulletinStatus, deriveCameraHost, describeCameraCapabilities, designationsSchema, deviceControlEnabled, deviceHttpEnabled, deviceHttpTargets, deviceHttpTimeoutMs, deviceProbeTtlSeconds, disconnectedState, emitNotificationCreated, emptyPersonalEmergencyChain, encodeHidPacsCard, entitledSiteScope, events_namespace_collection, expandModules, expiredBulletinSweepFilter, expiredVehicleSweepFilter, facility_bookings_namespace_collection, feedbackSchema, feedbacks2_namespace_collection, feedbacks_namespace_collection, ffmpegFrameArgs, ffmpegPath, filterByAccess, formatCapabilityTrace, formatDahuaDate, getIO, getSessionIdFromRequest, grabWithSubStreamFallback, guests_namespace_collection, hasAnyCapability, hasAnyPermission, hasOrgInvitation, hasOrgOwnership, hasOrgSiteReach, hexToAreaColour, hidRawUint64, holdsLift, holdsRole, incidentReport, incidentReportLog, incidents_namespace_collection, invitationOffersRole, isAvailableForWork, isCameraEntitled, isDispatchable, isDuplicateMemberError, isDuplicateVersionError, isLiftAvailable, isLikelySelfServiceEmail, isLiveVehicleStatus, isPatrolCctvCamera, isPlatformOwner, isPromoCodeExpired, isRelayPlayerUrl, isSafeRelativePath, isSafeToCross, isSeasonPassVehicle, isSuperAdmin, isTermsCurrent, isTrackingStale, isValidTimezone, levelPixelToMetres, levelScale, levelSolids, listStaffUserIds, liveStatusFor, logCamera, manpowerDesignationsSchema, manpowerEvents, manpowerMonitoringSchema, manpowerRemarksSchema, manpowerSitesSchema, mapWithLimit, maskNric, memberModulesHandlers, metresToPixel, missingForTier, moduleDeniedForCaller, moduleGateEnforceKeys, moduleGateMode, moduleImpact, moduleListGateOn, nfcPatrolSettingsSchema, nfcPatrolSettingsSchemaUpdate, normalizeAcceptedTerms, normalizeHidCardValue, notificationAccessReport, notificationCategory, notificationCategoryLabel, notificationEvents, notificationRoom, notifyAccessMode, occasionForStatus, occurrence_book_namespace_collection, onBookTimezonesChanged, online_forms_namespace_collection, orgLevelRoles, orgModulesHandlers, orgOwnerRepairHandlers, orgOwnerRepairOn, orgQualifiesForOwnerRepair, orgSchema, overnight_parking_requests_namespace_collection, parseCameraChannel, parseCameraHost, parseDahuaFind, parseDeviceTime, parseHidJsonLossless, parsePromoExpiry, parseRobotCommand, parseSoftwareVersion, pickAuditFields, pickCustomerSiteProperties, pixelToMetres, planBulkCameraImport, planDayFromJsDay, planOrgOwnerRepair, platform_terms_namespace_collection, playbackRelays, playbackWindowRefusal, promoCodeRefusal, promoCodeSchema, promoCodeStatusSchema, promoCodeUpdate, promoCodeUpdateSchema, ptzEndpoint, publicCameraFields, readsAsApprovedAccount, recordConsoleAction, refuseServiceProviderInviteAction, registerCameraTransport, registerOunitechBrand, registerRobotAdapter, registeredRobotBrands, relayForRecorder, remarksSchema, renderPagePdf, requireConsolePermission, requirePlatformStaff, resetCameraTransports, residentAppModuleKeys, residentAppModulesSchema, residentFormEntry, resolutionRefusalReason, resolveCamera, resolveDeviceHttp, resolveHidPhysicalCardValue, resolveInviteActor, resolveSiteTimezone, resolveStaffRole, robotActionsFor, robotAdapterFor, robotCloudBody, robotCloudSign, robotCloudSigningString, robotCloudTimestamp, robotMode, robotModeFromList, robotSchema, robotScopeForApp, robotTier, robotTypesVisibleTo, rtspUrl, scaleFromMeasurement, schema, schemaAppSlugNotification, schemaApprovedBy, schemaApprover, schemaBidPreloved, schemaBilling, schemaBillingConfiguration, schemaBillingItem, schemaBuilding, schemaBuildingLevel, schemaBuildingUnit, schemaBuildingUpdateOptions, schemaBulletinBoard, schemaBulletinVideo, schemaCategoryPreloved, schemaChannelPreloved, schemaChatPreloved, schemaConsoleAudit, schemaCreateHidAmicoIdentity, schemaCreateNfcPatrolLog, schemaCreateNotification, schemaCustomerSite, schemaDiscoverHidAmicoReader, schemaDocumentManagement, schemaEntryPassSettings, schemaEventManagement, schemaFiles, schemaFormEntry, schemaGuestManagement, schemaHidAmicoAccessLogQuery, schemaHidAmicoAssignUserCard, schemaHidAmicoConfiguration, schemaHidAmicoEnrollUserCard, schemaHidAmicoEvent, schemaHidAmicoExecuteActions, schemaHidAmicoIdentity, schemaHidAmicoIdentityIdParams, schemaHidAmicoIdentityQuery, schemaHidAmicoIntercomCall, schemaHidAmicoLogQuery, schemaHidAmicoMonitor, schemaHidAmicoNotificationParams, schemaHidAmicoObjectOperation, schemaHidAmicoOperatingMode, schemaHidAmicoReader, schemaHidAmicoReaderIdParams, schemaHidAmicoReaderListQuery, schemaHidAmicoReaderUserQuery, schemaHidAmicoSetConfiguration, schemaHidAmicoSiteIdParams, schemaHidAmicoSync, schemaHidAmicoUserCardIdParams, schemaHidAmicoUserCardParams, schemaHidAmicoUserImageParams, schemaHidAmicoUserImageUploadQuery, schemaHidAmicoUserPin, schemaHidAmicoUserPinParams, schemaHidAmicoVisitorImageParams, schemaHidAmicoVisitorImageUploadQuery, schemaHidAmicoVisitorQr, schemaHidPermissionCandidateQuery, schemaHidPermissionScopeQuery, schemaHidSipAccountRequest, schemaIncidentReport, schemaListNotification, schemaMultipleDocumentManagement, schemaNfcPatrolLog, schemaNfcPatrolRoute, schemaNfcPatrolTag, schemaNfcPatrolTagUpdateData, schemaNotification, schemaNotificationPreference, schemaNotificationPreferenceOff, schemaOccurrenceBook, schemaOccurrenceEntry, schemaOccurrenceSubject, schemaOnlineForm, schemaOvernightParkingApprovalHours, schemaOvernightParkingRequest, schemaPatrolEmail, schemaPatrolEmailCreatedBy, schemaPatrolEmailLogRef, schemaPatrolEmailQuery, schemaPatrolLog, schemaPatrolQuestion, schemaPatrolRoute, schemaPerson, schemaPersonalEmergencyContact, schemaPlate, schemaPlatformTerms, schemaPost, schemaPostFavorite, schemaResendPatrolEmail, schemaResidentSelfSignUp, schemaSelfServiceVisitor, schemaSendPatrolEmail, 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, schemaUpdateNotificationPreference, schemaUpdateOccurrenceBook, schemaUpdateOccurrenceEntry, schemaUpdateOccurrenceSubject, schemaUpdateOnlineForm, schemaUpdateOptions, schemaUpdateOvernightParkingRequest, schemaUpdatePatrolLog, schemaUpdatePatrolQuestion, schemaUpdatePatrolRoute, schemaUpdatePerson, schemaUpdatePersonalEmergencyChain, schemaUpdatePost, schemaUpdatePostFavorite, schemaUpdateServiceProviderBilling, schemaUpdateSiteBillingConfiguration, schemaUpdateSiteBillingItem, schemaUpdateSiteCamera, schemaUpdateSiteFacility, schemaUpdateSiteFacilityBooking, schemaUpdateSiteUnitBilling, schemaUpdateStatementOfAccount, schemaUpdateSubcategoryPreloved, schemaUpdateVisTrans, schemaVehicleTransaction, schemaVisitorTransaction, schemeCamera, schemeLogCamera, selectHealthTargets, selfServiceEmailSubject, servesFloor, serviceProviderInviteLabel, sessionSchema, setIO, shiftSchema, signLiveLink, signPlaybackLink, siteDayBounds, siteModulesHandlers, siteSchema, site_people_namespace_collection, snapshotEndpoint, snapshotRefusalReason, staffMayBypass, startTodaysBookForSite, stringifyHidJson, stripFacialImageMetadata, subscriptionPlanSchema, summariseBulkCameraPlan, supports, trackingBackoffMs, uncontrollableFleetWarning, 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, useConsoleAuditController, useConsoleAuditRepo, 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, useNotificationPreferenceController, useNotificationPreferenceRepo, useNotificationPreferenceService, useNotificationRepo, useOccurrenceBookController, useOccurrenceBookRepo, useOccurrenceBookService, useOccurrenceEntryController, useOccurrenceEntryRepo, useOccurrenceEntryService, useOccurrenceSubjectController, useOccurrenceSubjectRepo, useOccurrenceSubjectService, useOnlineFormController, useOnlineFormRepo, useOrgController, useOrgControllerV2, useOrgOwnerRepairRepo, useOrgRepo, useOvernightParkingController, useOvernightParkingRepo, useOvernightParkingRequestController, useOvernightParkingRequestRepo, useOvernightParkingRequestService, usePatrolEmailController, usePatrolEmailRepo, usePatrolEmailService, usePatrolLogController, usePatrolLogRepo, usePatrolLogService, usePatrolQuestionController, usePatrolQuestionRepo, usePatrolRouteController, usePatrolRouteRepo, usePersonController, usePersonRepo, usePersonalEmergencyChainController, usePersonalEmergencyChainRepo, usePersonalEmergencyChainService, usePlatformTermsController, usePlatformTermsRepo, usePlatformTermsService, usePostFavoriteController, usePostFavoriteRepo, usePostFavoriteService, usePostPrelovedController, usePostPrelovedRepo, usePriceController, usePriceModel, usePriceRepo, usePromoCodeController, usePromoCodeRepo, useRedDotPaymentController, useRedDotPaymentRepo, useRedDotPaymentSvc, useRobotCloudService, useRobotController, useRobotFleetController, useRobotFleetService, useRobotRepo, useRobotService, useRoleController, useRoleControllerV2, useRoleRepo, useRoleRepoV2, useRoleServiceV2, useServiceProviderBillingController, useServiceProviderBillingRepo, useServiceProviderBillingService, useServiceProviderController, useServiceProviderInviteController, useServiceProviderInviteService, 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, useSubscriptionPlanController, useSubscriptionPlanRepo, useSubscriptionRepo, useSubscriptionService, useUserController, useUserControllerV2, useUserRepo, useUserRepoV2, useUserService, useUserServiceV2, useVehicleController, useVehicleRepo, useVehicleService, useVerificationController, useVerificationControllerV2, useVerificationRepo, useVerificationRepoV2, useVerificationService, useVerificationServiceV2, useVisitorTransactionController, useVisitorTransactionRepo, useVisitorTransactionService, useWorkOrderController, useWorkOrderRepo, useWorkOrderService, userSchema, vehicleCategoryFor, vehicleHistoryEntry, vehicleListViewQuery, vehicleSchema, vehicleViewOf, vehicles_namespace_collection, vertexDistancePx, visitorPersonRepo, visitorPersonService, visitorType, visitors_namespace_collection, wallConfig, wallsFromOccupancyGrid, withLiveLink, workOrderSchema, work_orders2_namespace_collection, work_orders_namespace_collection };
|