@camstack/addon-model-studio 1.1.141 → 1.1.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{MotionZonesSettings-B5oV0MdI.mjs → MotionZonesSettings-BCZidV1W.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-C1Qm7jrF.mjs → PrivacyMaskSettings-U0a679pe.mjs} +4 -4
- package/dist/{SceneMonitorEditor-Cc76ecMi.mjs → SceneMonitorEditor-D7gmH35x.mjs} +13 -13
- package/dist/_stub.js +12 -14
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CTkEe-XL.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DYqebP3v.mjs} +4 -4
- package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Ck5bXAEc.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CKEe1Nbx.mjs} +1 -1
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-CRf6DNPv.mjs → hostInit-DPytEYgO.mjs} +3 -3
- package/dist/model-studio.addon.js +209 -7
- package/dist/model-studio.addon.mjs +209 -7
- package/dist/{player-overlays-M0l7AyPu.mjs → player-overlays-h4kwY-YM.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-8-xrhADg.mjs → responsive-C6dBVCr7.mjs} +1 -1
- package/dist/{use-device-snapshot-BJO0wrqY.mjs → scene-monitor-copy-BJ1b42AA.mjs} +46 -46
- package/dist/{square-8-ETDCsB.mjs → square-DRNiF2hB.mjs} +1 -1
- package/dist/{trash-2-Bgi7lLFL.mjs → trash-2-DRNHM26U.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CDobikrl.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CigmnmQE.mjs} +1 -1
- package/package.json +1 -1
|
@@ -5884,7 +5884,7 @@ var ZodIssueCode = {
|
|
|
5884
5884
|
var ZodFirstPartyTypeKind;
|
|
5885
5885
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5886
5886
|
//#endregion
|
|
5887
|
-
//#region ../types/dist/sleep-
|
|
5887
|
+
//#region ../types/dist/sleep-vl6nBE8d.mjs
|
|
5888
5888
|
/**
|
|
5889
5889
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5890
5890
|
* window to float samples (D455).
|
|
@@ -29331,14 +29331,81 @@ DeviceType.Camera, method(object({ deviceId: number() }), PrivacyMaskOptionsSche
|
|
|
29331
29331
|
kind: "mutation",
|
|
29332
29332
|
auth: "admin"
|
|
29333
29333
|
});
|
|
29334
|
+
/**
|
|
29335
|
+
* What a preset id DOES on this camera.
|
|
29336
|
+
*
|
|
29337
|
+
* On several PTZ firmwares the preset namespace is shared: low ids are stored
|
|
29338
|
+
* positions, a reserved band triggers camera FUNCTIONS. The dispensa camera
|
|
29339
|
+
* (Hikvision) returns its own reserved band in the preset list, named by the
|
|
29340
|
+
* firmware:
|
|
29341
|
+
*
|
|
29342
|
+
* 34 Back to origin · 39 Day mode · 40 Night mode · 46 Day/Night Auto Mode
|
|
29343
|
+
* 92 Set manual limits · 93 Save manual limits · 94 Remote reboot
|
|
29344
|
+
* 95 Call OSD menu
|
|
29345
|
+
*
|
|
29346
|
+
* We used to hand all of these to the UI as ordinary presets. Saving over one
|
|
29347
|
+
* is what produced `PUT /ISAPI/PTZCtrl/channels/1/presets/34 -> HTTP 500`: the
|
|
29348
|
+
* camera refusing to let "Back to origin" be overwritten, surfaced to the
|
|
29349
|
+
* operator as a transport failure.
|
|
29350
|
+
*
|
|
29351
|
+
* A function preset stays fully usable as a DESTINATION -- `goToPreset('34')`
|
|
29352
|
+
* is the single most useful thing that camera can do. Only `savePreset` and
|
|
29353
|
+
* `deletePreset` are gated.
|
|
29354
|
+
*/
|
|
29355
|
+
var PtzPresetFunctionSchema = _enum([
|
|
29356
|
+
"home",
|
|
29357
|
+
"day-mode",
|
|
29358
|
+
"night-mode",
|
|
29359
|
+
"day-night-auto",
|
|
29360
|
+
"set-limits",
|
|
29361
|
+
"save-limits",
|
|
29362
|
+
"reboot",
|
|
29363
|
+
"osd-menu"
|
|
29364
|
+
]);
|
|
29334
29365
|
var PtzPresetSchema = object({
|
|
29335
29366
|
id: string(),
|
|
29336
|
-
name: string()
|
|
29367
|
+
name: string(),
|
|
29368
|
+
/**
|
|
29369
|
+
* The firmware function this id performs, when the provider KNOWS the id is
|
|
29370
|
+
* reserved. `null` = an ordinary stored position, OR a reserved id this
|
|
29371
|
+
* provider does not recognise -- the two are told apart by `writable`.
|
|
29372
|
+
*/
|
|
29373
|
+
fn: PtzPresetFunctionSchema.nullable(),
|
|
29374
|
+
/**
|
|
29375
|
+
* Whether `savePreset` / `deletePreset` may target this id. A provider sets
|
|
29376
|
+
* it false only for a band it KNOWS is reserved; where the firmware is not
|
|
29377
|
+
* documented it stays true and a refusal comes from the camera, named.
|
|
29378
|
+
*/
|
|
29379
|
+
writable: boolean()
|
|
29337
29380
|
});
|
|
29381
|
+
/**
|
|
29382
|
+
* Where the head is pointing -- per axis, and `null` when the driver cannot
|
|
29383
|
+
* read it.
|
|
29384
|
+
*
|
|
29385
|
+
* It used to be three REQUIRED numbers, which left a provider that cannot read
|
|
29386
|
+
* position no way to say so. All four said `0`:
|
|
29387
|
+
*
|
|
29388
|
+
* reolink `return { pan: 0, tilt: 0, zoom: 0 }` "until a position-query
|
|
29389
|
+
* path lands upstream"
|
|
29390
|
+
* hikvision stub, "firmware-dependent and frequently absent"
|
|
29391
|
+
* amcrest stub, "no generic absolute-position read for this model family"
|
|
29392
|
+
* onvif throws
|
|
29393
|
+
*
|
|
29394
|
+
* So every consumer asking where a camera points was told "perfectly centred"
|
|
29395
|
+
* by four cameras that had never looked. That is D393 -- a measurement that
|
|
29396
|
+
* FAILED is `null`, never `0`, and the type says so all the way to the
|
|
29397
|
+
* decision -- the same shape as the unreadable `statfs` folded into "0 bytes of
|
|
29398
|
+
* headroom", which evacuated a healthy disk.
|
|
29399
|
+
*
|
|
29400
|
+
* D393 also says to check for a narrower structural TWIN of the result type.
|
|
29401
|
+
* There is one: `PtzStatusSchema` extends this, so the lie had already
|
|
29402
|
+
* propagated into `getStatus`, which is the surface `getPosition`'s own comment
|
|
29403
|
+
* tells callers to migrate to.
|
|
29404
|
+
*/
|
|
29338
29405
|
var PtzPositionSchema = object({
|
|
29339
|
-
pan: number(),
|
|
29340
|
-
tilt: number(),
|
|
29341
|
-
zoom: number()
|
|
29406
|
+
pan: number().nullable(),
|
|
29407
|
+
tilt: number().nullable(),
|
|
29408
|
+
zoom: number().nullable()
|
|
29342
29409
|
});
|
|
29343
29410
|
var PtzMoveCommandSchema = object({
|
|
29344
29411
|
pan: number().optional(),
|
|
@@ -29357,7 +29424,72 @@ var PtzOptionsSchema = object({
|
|
|
29357
29424
|
maxPresets: number().optional(),
|
|
29358
29425
|
/** Whether the camera exposes a controllable autofocus toggle
|
|
29359
29426
|
* (boolean `hasX` per the getOptions availability convention). */
|
|
29360
|
-
hasAutofocus: boolean()
|
|
29427
|
+
hasAutofocus: boolean(),
|
|
29428
|
+
/**
|
|
29429
|
+
* How many distinct speeds this camera's NATIVE scale offers.
|
|
29430
|
+
*
|
|
29431
|
+
* The cap's `speed` is normalized 0..1 and each provider maps it down --
|
|
29432
|
+
* Baichuan 1..63, Dahua 1..8, ISAPI's percentage -100..100. The normalized
|
|
29433
|
+
* value hides how coarse that really is: asking an amcrest for `0.37` is
|
|
29434
|
+
* meaningless, because it has eight steps and three of them round to the
|
|
29435
|
+
* same one. A loop that tunes its own gain has to know the granularity of
|
|
29436
|
+
* the knob it is turning.
|
|
29437
|
+
*
|
|
29438
|
+
* `null` = the driver does not know, or the scale is continuous (ONVIF takes
|
|
29439
|
+
* a float). Never a made-up number.
|
|
29440
|
+
*/
|
|
29441
|
+
speedSteps: number().int().positive().nullable(),
|
|
29442
|
+
/**
|
|
29443
|
+
* How long ONE `move` pulse runs on this driver, ms.
|
|
29444
|
+
*
|
|
29445
|
+
* `move` is a self-terminating burst everywhere, but every provider hardcoded
|
|
29446
|
+
* its own duration in private -- 200 reolink, 350 amcrest, 500 hikvision,
|
|
29447
|
+
* 1000 onvif -- so no caller could read it. It is the DENOMINATOR of "how far
|
|
29448
|
+
* did the head travel per pulse": without it a measured displacement has no
|
|
29449
|
+
* gain to be divided into.
|
|
29450
|
+
*
|
|
29451
|
+
* `null` = the driver cannot say.
|
|
29452
|
+
*/
|
|
29453
|
+
moveImpulseMs: number().int().positive().nullable()
|
|
29454
|
+
});
|
|
29455
|
+
/**
|
|
29456
|
+
* Which preset `goHome` goes to, and WHO decided.
|
|
29457
|
+
*
|
|
29458
|
+
* `goHome` used to be three vendor "conventions" written in three comments --
|
|
29459
|
+
* Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
|
|
29460
|
+
* not one of the three cameras honours its own:
|
|
29461
|
+
*
|
|
29462
|
+
* 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
|
|
29463
|
+
* 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
|
|
29464
|
+
* 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
|
|
29465
|
+
*
|
|
29466
|
+
* So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
|
|
29467
|
+
* and two of the three swallowed the failure in a bare `catch`. For autotrack
|
|
29468
|
+
* this is the HOTTEST path -- it runs every time a subject is released -- so it
|
|
29469
|
+
* needs an answer that is true per camera and audible when it is missing.
|
|
29470
|
+
*
|
|
29471
|
+
* `source` is what makes it honest:
|
|
29472
|
+
* - `operator` -- picked in the UI, stored by the provider.
|
|
29473
|
+
* - `firmware` -- the camera itself named a preset `fn: 'home'` (Hikvision's
|
|
29474
|
+
* "Back to origin"), adopted as the default with nothing to configure.
|
|
29475
|
+
* - `native` -- the driver homes WITHOUT a preset at all. ONVIF does:
|
|
29476
|
+
* `goHome` is `ptzAbsoluteMove({x:0, y:0, zoom:0})`. `presetId` is null and
|
|
29477
|
+
* that is not a failure -- there is nothing to pick, and the UI must offer
|
|
29478
|
+
* no picker.
|
|
29479
|
+
* - `none` -- nothing is configured and the camera names nothing.
|
|
29480
|
+
* `goHome` REFUSES rather than moving the head somewhere arbitrary.
|
|
29481
|
+
*
|
|
29482
|
+
* `source === 'none'` is the refusal condition, NOT `presetId === null`: the
|
|
29483
|
+
* native case has no preset and homes perfectly well.
|
|
29484
|
+
*/
|
|
29485
|
+
var PtzHomePresetSchema = object({
|
|
29486
|
+
presetId: string().nullable(),
|
|
29487
|
+
source: _enum([
|
|
29488
|
+
"operator",
|
|
29489
|
+
"firmware",
|
|
29490
|
+
"native",
|
|
29491
|
+
"none"
|
|
29492
|
+
])
|
|
29361
29493
|
});
|
|
29362
29494
|
DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), array(PtzPresetSchema)), method(object({
|
|
29363
29495
|
deviceId: number(),
|
|
@@ -29375,7 +29507,22 @@ DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _
|
|
|
29375
29507
|
}), _void(), {
|
|
29376
29508
|
kind: "mutation",
|
|
29377
29509
|
auth: "admin"
|
|
29378
|
-
}), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }),
|
|
29510
|
+
}), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzHomePresetSchema), method(object({
|
|
29511
|
+
deviceId: number(),
|
|
29512
|
+
presetId: string().nullable()
|
|
29513
|
+
}), _void(), {
|
|
29514
|
+
kind: "mutation",
|
|
29515
|
+
auth: "admin"
|
|
29516
|
+
}), method(object({ deviceId: number() }), _void(), {
|
|
29517
|
+
kind: "mutation",
|
|
29518
|
+
auth: "admin"
|
|
29519
|
+
}), method(object({ deviceId: number() }), number().int().nullable()), method(object({
|
|
29520
|
+
deviceId: number(),
|
|
29521
|
+
seconds: number().int().min(0).max(3600)
|
|
29522
|
+
}), _void(), {
|
|
29523
|
+
kind: "mutation",
|
|
29524
|
+
auth: "admin"
|
|
29525
|
+
}), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
|
|
29379
29526
|
deviceId: number(),
|
|
29380
29527
|
enabled: boolean()
|
|
29381
29528
|
}), _void(), { kind: "mutation" });
|
|
@@ -36378,6 +36525,12 @@ Object.freeze({
|
|
|
36378
36525
|
addonId: null,
|
|
36379
36526
|
access: "create"
|
|
36380
36527
|
},
|
|
36528
|
+
"ptz.captureHomeHere": {
|
|
36529
|
+
capName: "ptz",
|
|
36530
|
+
capScope: "device",
|
|
36531
|
+
addonId: null,
|
|
36532
|
+
access: "create"
|
|
36533
|
+
},
|
|
36381
36534
|
"ptz.continuousMove": {
|
|
36382
36535
|
capName: "ptz",
|
|
36383
36536
|
capScope: "device",
|
|
@@ -36390,6 +36543,18 @@ Object.freeze({
|
|
|
36390
36543
|
addonId: null,
|
|
36391
36544
|
access: "delete"
|
|
36392
36545
|
},
|
|
36546
|
+
"ptz.getHomePreset": {
|
|
36547
|
+
capName: "ptz",
|
|
36548
|
+
capScope: "device",
|
|
36549
|
+
addonId: null,
|
|
36550
|
+
access: "view"
|
|
36551
|
+
},
|
|
36552
|
+
"ptz.getHomeReturnSeconds": {
|
|
36553
|
+
capName: "ptz",
|
|
36554
|
+
capScope: "device",
|
|
36555
|
+
addonId: null,
|
|
36556
|
+
access: "view"
|
|
36557
|
+
},
|
|
36393
36558
|
"ptz.getOptions": {
|
|
36394
36559
|
capName: "ptz",
|
|
36395
36560
|
capScope: "device",
|
|
@@ -36438,6 +36603,18 @@ Object.freeze({
|
|
|
36438
36603
|
addonId: null,
|
|
36439
36604
|
access: "create"
|
|
36440
36605
|
},
|
|
36606
|
+
"ptz.setHomePreset": {
|
|
36607
|
+
capName: "ptz",
|
|
36608
|
+
capScope: "device",
|
|
36609
|
+
addonId: null,
|
|
36610
|
+
access: "create"
|
|
36611
|
+
},
|
|
36612
|
+
"ptz.setHomeReturnSeconds": {
|
|
36613
|
+
capName: "ptz",
|
|
36614
|
+
capScope: "device",
|
|
36615
|
+
addonId: null,
|
|
36616
|
+
access: "create"
|
|
36617
|
+
},
|
|
36441
36618
|
"ptz.stop": {
|
|
36442
36619
|
capName: "ptz",
|
|
36443
36620
|
capScope: "device",
|
|
@@ -39601,6 +39778,11 @@ Object.freeze({
|
|
|
39601
39778
|
form: "single",
|
|
39602
39779
|
optional: false
|
|
39603
39780
|
}],
|
|
39781
|
+
"ptz.captureHomeHere": [{
|
|
39782
|
+
name: "deviceId",
|
|
39783
|
+
form: "single",
|
|
39784
|
+
optional: false
|
|
39785
|
+
}],
|
|
39604
39786
|
"ptz.continuousMove": [{
|
|
39605
39787
|
name: "deviceId",
|
|
39606
39788
|
form: "single",
|
|
@@ -39611,6 +39793,16 @@ Object.freeze({
|
|
|
39611
39793
|
form: "single",
|
|
39612
39794
|
optional: false
|
|
39613
39795
|
}],
|
|
39796
|
+
"ptz.getHomePreset": [{
|
|
39797
|
+
name: "deviceId",
|
|
39798
|
+
form: "single",
|
|
39799
|
+
optional: false
|
|
39800
|
+
}],
|
|
39801
|
+
"ptz.getHomeReturnSeconds": [{
|
|
39802
|
+
name: "deviceId",
|
|
39803
|
+
form: "single",
|
|
39804
|
+
optional: false
|
|
39805
|
+
}],
|
|
39614
39806
|
"ptz.getOptions": [{
|
|
39615
39807
|
name: "deviceId",
|
|
39616
39808
|
form: "single",
|
|
@@ -39651,6 +39843,16 @@ Object.freeze({
|
|
|
39651
39843
|
form: "single",
|
|
39652
39844
|
optional: false
|
|
39653
39845
|
}],
|
|
39846
|
+
"ptz.setHomePreset": [{
|
|
39847
|
+
name: "deviceId",
|
|
39848
|
+
form: "single",
|
|
39849
|
+
optional: false
|
|
39850
|
+
}],
|
|
39851
|
+
"ptz.setHomeReturnSeconds": [{
|
|
39852
|
+
name: "deviceId",
|
|
39853
|
+
form: "single",
|
|
39854
|
+
optional: false
|
|
39855
|
+
}],
|
|
39654
39856
|
"ptz.stop": [{
|
|
39655
39857
|
name: "deviceId",
|
|
39656
39858
|
form: "single",
|
|
@@ -5863,7 +5863,7 @@ var ZodIssueCode = {
|
|
|
5863
5863
|
var ZodFirstPartyTypeKind;
|
|
5864
5864
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5865
5865
|
//#endregion
|
|
5866
|
-
//#region ../types/dist/sleep-
|
|
5866
|
+
//#region ../types/dist/sleep-vl6nBE8d.mjs
|
|
5867
5867
|
/**
|
|
5868
5868
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5869
5869
|
* window to float samples (D455).
|
|
@@ -29310,14 +29310,81 @@ DeviceType.Camera, method(object({ deviceId: number() }), PrivacyMaskOptionsSche
|
|
|
29310
29310
|
kind: "mutation",
|
|
29311
29311
|
auth: "admin"
|
|
29312
29312
|
});
|
|
29313
|
+
/**
|
|
29314
|
+
* What a preset id DOES on this camera.
|
|
29315
|
+
*
|
|
29316
|
+
* On several PTZ firmwares the preset namespace is shared: low ids are stored
|
|
29317
|
+
* positions, a reserved band triggers camera FUNCTIONS. The dispensa camera
|
|
29318
|
+
* (Hikvision) returns its own reserved band in the preset list, named by the
|
|
29319
|
+
* firmware:
|
|
29320
|
+
*
|
|
29321
|
+
* 34 Back to origin · 39 Day mode · 40 Night mode · 46 Day/Night Auto Mode
|
|
29322
|
+
* 92 Set manual limits · 93 Save manual limits · 94 Remote reboot
|
|
29323
|
+
* 95 Call OSD menu
|
|
29324
|
+
*
|
|
29325
|
+
* We used to hand all of these to the UI as ordinary presets. Saving over one
|
|
29326
|
+
* is what produced `PUT /ISAPI/PTZCtrl/channels/1/presets/34 -> HTTP 500`: the
|
|
29327
|
+
* camera refusing to let "Back to origin" be overwritten, surfaced to the
|
|
29328
|
+
* operator as a transport failure.
|
|
29329
|
+
*
|
|
29330
|
+
* A function preset stays fully usable as a DESTINATION -- `goToPreset('34')`
|
|
29331
|
+
* is the single most useful thing that camera can do. Only `savePreset` and
|
|
29332
|
+
* `deletePreset` are gated.
|
|
29333
|
+
*/
|
|
29334
|
+
var PtzPresetFunctionSchema = _enum([
|
|
29335
|
+
"home",
|
|
29336
|
+
"day-mode",
|
|
29337
|
+
"night-mode",
|
|
29338
|
+
"day-night-auto",
|
|
29339
|
+
"set-limits",
|
|
29340
|
+
"save-limits",
|
|
29341
|
+
"reboot",
|
|
29342
|
+
"osd-menu"
|
|
29343
|
+
]);
|
|
29313
29344
|
var PtzPresetSchema = object({
|
|
29314
29345
|
id: string(),
|
|
29315
|
-
name: string()
|
|
29346
|
+
name: string(),
|
|
29347
|
+
/**
|
|
29348
|
+
* The firmware function this id performs, when the provider KNOWS the id is
|
|
29349
|
+
* reserved. `null` = an ordinary stored position, OR a reserved id this
|
|
29350
|
+
* provider does not recognise -- the two are told apart by `writable`.
|
|
29351
|
+
*/
|
|
29352
|
+
fn: PtzPresetFunctionSchema.nullable(),
|
|
29353
|
+
/**
|
|
29354
|
+
* Whether `savePreset` / `deletePreset` may target this id. A provider sets
|
|
29355
|
+
* it false only for a band it KNOWS is reserved; where the firmware is not
|
|
29356
|
+
* documented it stays true and a refusal comes from the camera, named.
|
|
29357
|
+
*/
|
|
29358
|
+
writable: boolean()
|
|
29316
29359
|
});
|
|
29360
|
+
/**
|
|
29361
|
+
* Where the head is pointing -- per axis, and `null` when the driver cannot
|
|
29362
|
+
* read it.
|
|
29363
|
+
*
|
|
29364
|
+
* It used to be three REQUIRED numbers, which left a provider that cannot read
|
|
29365
|
+
* position no way to say so. All four said `0`:
|
|
29366
|
+
*
|
|
29367
|
+
* reolink `return { pan: 0, tilt: 0, zoom: 0 }` "until a position-query
|
|
29368
|
+
* path lands upstream"
|
|
29369
|
+
* hikvision stub, "firmware-dependent and frequently absent"
|
|
29370
|
+
* amcrest stub, "no generic absolute-position read for this model family"
|
|
29371
|
+
* onvif throws
|
|
29372
|
+
*
|
|
29373
|
+
* So every consumer asking where a camera points was told "perfectly centred"
|
|
29374
|
+
* by four cameras that had never looked. That is D393 -- a measurement that
|
|
29375
|
+
* FAILED is `null`, never `0`, and the type says so all the way to the
|
|
29376
|
+
* decision -- the same shape as the unreadable `statfs` folded into "0 bytes of
|
|
29377
|
+
* headroom", which evacuated a healthy disk.
|
|
29378
|
+
*
|
|
29379
|
+
* D393 also says to check for a narrower structural TWIN of the result type.
|
|
29380
|
+
* There is one: `PtzStatusSchema` extends this, so the lie had already
|
|
29381
|
+
* propagated into `getStatus`, which is the surface `getPosition`'s own comment
|
|
29382
|
+
* tells callers to migrate to.
|
|
29383
|
+
*/
|
|
29317
29384
|
var PtzPositionSchema = object({
|
|
29318
|
-
pan: number(),
|
|
29319
|
-
tilt: number(),
|
|
29320
|
-
zoom: number()
|
|
29385
|
+
pan: number().nullable(),
|
|
29386
|
+
tilt: number().nullable(),
|
|
29387
|
+
zoom: number().nullable()
|
|
29321
29388
|
});
|
|
29322
29389
|
var PtzMoveCommandSchema = object({
|
|
29323
29390
|
pan: number().optional(),
|
|
@@ -29336,7 +29403,72 @@ var PtzOptionsSchema = object({
|
|
|
29336
29403
|
maxPresets: number().optional(),
|
|
29337
29404
|
/** Whether the camera exposes a controllable autofocus toggle
|
|
29338
29405
|
* (boolean `hasX` per the getOptions availability convention). */
|
|
29339
|
-
hasAutofocus: boolean()
|
|
29406
|
+
hasAutofocus: boolean(),
|
|
29407
|
+
/**
|
|
29408
|
+
* How many distinct speeds this camera's NATIVE scale offers.
|
|
29409
|
+
*
|
|
29410
|
+
* The cap's `speed` is normalized 0..1 and each provider maps it down --
|
|
29411
|
+
* Baichuan 1..63, Dahua 1..8, ISAPI's percentage -100..100. The normalized
|
|
29412
|
+
* value hides how coarse that really is: asking an amcrest for `0.37` is
|
|
29413
|
+
* meaningless, because it has eight steps and three of them round to the
|
|
29414
|
+
* same one. A loop that tunes its own gain has to know the granularity of
|
|
29415
|
+
* the knob it is turning.
|
|
29416
|
+
*
|
|
29417
|
+
* `null` = the driver does not know, or the scale is continuous (ONVIF takes
|
|
29418
|
+
* a float). Never a made-up number.
|
|
29419
|
+
*/
|
|
29420
|
+
speedSteps: number().int().positive().nullable(),
|
|
29421
|
+
/**
|
|
29422
|
+
* How long ONE `move` pulse runs on this driver, ms.
|
|
29423
|
+
*
|
|
29424
|
+
* `move` is a self-terminating burst everywhere, but every provider hardcoded
|
|
29425
|
+
* its own duration in private -- 200 reolink, 350 amcrest, 500 hikvision,
|
|
29426
|
+
* 1000 onvif -- so no caller could read it. It is the DENOMINATOR of "how far
|
|
29427
|
+
* did the head travel per pulse": without it a measured displacement has no
|
|
29428
|
+
* gain to be divided into.
|
|
29429
|
+
*
|
|
29430
|
+
* `null` = the driver cannot say.
|
|
29431
|
+
*/
|
|
29432
|
+
moveImpulseMs: number().int().positive().nullable()
|
|
29433
|
+
});
|
|
29434
|
+
/**
|
|
29435
|
+
* Which preset `goHome` goes to, and WHO decided.
|
|
29436
|
+
*
|
|
29437
|
+
* `goHome` used to be three vendor "conventions" written in three comments --
|
|
29438
|
+
* Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
|
|
29439
|
+
* not one of the three cameras honours its own:
|
|
29440
|
+
*
|
|
29441
|
+
* 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
|
|
29442
|
+
* 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
|
|
29443
|
+
* 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
|
|
29444
|
+
*
|
|
29445
|
+
* So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
|
|
29446
|
+
* and two of the three swallowed the failure in a bare `catch`. For autotrack
|
|
29447
|
+
* this is the HOTTEST path -- it runs every time a subject is released -- so it
|
|
29448
|
+
* needs an answer that is true per camera and audible when it is missing.
|
|
29449
|
+
*
|
|
29450
|
+
* `source` is what makes it honest:
|
|
29451
|
+
* - `operator` -- picked in the UI, stored by the provider.
|
|
29452
|
+
* - `firmware` -- the camera itself named a preset `fn: 'home'` (Hikvision's
|
|
29453
|
+
* "Back to origin"), adopted as the default with nothing to configure.
|
|
29454
|
+
* - `native` -- the driver homes WITHOUT a preset at all. ONVIF does:
|
|
29455
|
+
* `goHome` is `ptzAbsoluteMove({x:0, y:0, zoom:0})`. `presetId` is null and
|
|
29456
|
+
* that is not a failure -- there is nothing to pick, and the UI must offer
|
|
29457
|
+
* no picker.
|
|
29458
|
+
* - `none` -- nothing is configured and the camera names nothing.
|
|
29459
|
+
* `goHome` REFUSES rather than moving the head somewhere arbitrary.
|
|
29460
|
+
*
|
|
29461
|
+
* `source === 'none'` is the refusal condition, NOT `presetId === null`: the
|
|
29462
|
+
* native case has no preset and homes perfectly well.
|
|
29463
|
+
*/
|
|
29464
|
+
var PtzHomePresetSchema = object({
|
|
29465
|
+
presetId: string().nullable(),
|
|
29466
|
+
source: _enum([
|
|
29467
|
+
"operator",
|
|
29468
|
+
"firmware",
|
|
29469
|
+
"native",
|
|
29470
|
+
"none"
|
|
29471
|
+
])
|
|
29340
29472
|
});
|
|
29341
29473
|
DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), array(PtzPresetSchema)), method(object({
|
|
29342
29474
|
deviceId: number(),
|
|
@@ -29354,7 +29486,22 @@ DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _
|
|
|
29354
29486
|
}), _void(), {
|
|
29355
29487
|
kind: "mutation",
|
|
29356
29488
|
auth: "admin"
|
|
29357
|
-
}), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }),
|
|
29489
|
+
}), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzHomePresetSchema), method(object({
|
|
29490
|
+
deviceId: number(),
|
|
29491
|
+
presetId: string().nullable()
|
|
29492
|
+
}), _void(), {
|
|
29493
|
+
kind: "mutation",
|
|
29494
|
+
auth: "admin"
|
|
29495
|
+
}), method(object({ deviceId: number() }), _void(), {
|
|
29496
|
+
kind: "mutation",
|
|
29497
|
+
auth: "admin"
|
|
29498
|
+
}), method(object({ deviceId: number() }), number().int().nullable()), method(object({
|
|
29499
|
+
deviceId: number(),
|
|
29500
|
+
seconds: number().int().min(0).max(3600)
|
|
29501
|
+
}), _void(), {
|
|
29502
|
+
kind: "mutation",
|
|
29503
|
+
auth: "admin"
|
|
29504
|
+
}), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
|
|
29358
29505
|
deviceId: number(),
|
|
29359
29506
|
enabled: boolean()
|
|
29360
29507
|
}), _void(), { kind: "mutation" });
|
|
@@ -36357,6 +36504,12 @@ Object.freeze({
|
|
|
36357
36504
|
addonId: null,
|
|
36358
36505
|
access: "create"
|
|
36359
36506
|
},
|
|
36507
|
+
"ptz.captureHomeHere": {
|
|
36508
|
+
capName: "ptz",
|
|
36509
|
+
capScope: "device",
|
|
36510
|
+
addonId: null,
|
|
36511
|
+
access: "create"
|
|
36512
|
+
},
|
|
36360
36513
|
"ptz.continuousMove": {
|
|
36361
36514
|
capName: "ptz",
|
|
36362
36515
|
capScope: "device",
|
|
@@ -36369,6 +36522,18 @@ Object.freeze({
|
|
|
36369
36522
|
addonId: null,
|
|
36370
36523
|
access: "delete"
|
|
36371
36524
|
},
|
|
36525
|
+
"ptz.getHomePreset": {
|
|
36526
|
+
capName: "ptz",
|
|
36527
|
+
capScope: "device",
|
|
36528
|
+
addonId: null,
|
|
36529
|
+
access: "view"
|
|
36530
|
+
},
|
|
36531
|
+
"ptz.getHomeReturnSeconds": {
|
|
36532
|
+
capName: "ptz",
|
|
36533
|
+
capScope: "device",
|
|
36534
|
+
addonId: null,
|
|
36535
|
+
access: "view"
|
|
36536
|
+
},
|
|
36372
36537
|
"ptz.getOptions": {
|
|
36373
36538
|
capName: "ptz",
|
|
36374
36539
|
capScope: "device",
|
|
@@ -36417,6 +36582,18 @@ Object.freeze({
|
|
|
36417
36582
|
addonId: null,
|
|
36418
36583
|
access: "create"
|
|
36419
36584
|
},
|
|
36585
|
+
"ptz.setHomePreset": {
|
|
36586
|
+
capName: "ptz",
|
|
36587
|
+
capScope: "device",
|
|
36588
|
+
addonId: null,
|
|
36589
|
+
access: "create"
|
|
36590
|
+
},
|
|
36591
|
+
"ptz.setHomeReturnSeconds": {
|
|
36592
|
+
capName: "ptz",
|
|
36593
|
+
capScope: "device",
|
|
36594
|
+
addonId: null,
|
|
36595
|
+
access: "create"
|
|
36596
|
+
},
|
|
36420
36597
|
"ptz.stop": {
|
|
36421
36598
|
capName: "ptz",
|
|
36422
36599
|
capScope: "device",
|
|
@@ -39580,6 +39757,11 @@ Object.freeze({
|
|
|
39580
39757
|
form: "single",
|
|
39581
39758
|
optional: false
|
|
39582
39759
|
}],
|
|
39760
|
+
"ptz.captureHomeHere": [{
|
|
39761
|
+
name: "deviceId",
|
|
39762
|
+
form: "single",
|
|
39763
|
+
optional: false
|
|
39764
|
+
}],
|
|
39583
39765
|
"ptz.continuousMove": [{
|
|
39584
39766
|
name: "deviceId",
|
|
39585
39767
|
form: "single",
|
|
@@ -39590,6 +39772,16 @@ Object.freeze({
|
|
|
39590
39772
|
form: "single",
|
|
39591
39773
|
optional: false
|
|
39592
39774
|
}],
|
|
39775
|
+
"ptz.getHomePreset": [{
|
|
39776
|
+
name: "deviceId",
|
|
39777
|
+
form: "single",
|
|
39778
|
+
optional: false
|
|
39779
|
+
}],
|
|
39780
|
+
"ptz.getHomeReturnSeconds": [{
|
|
39781
|
+
name: "deviceId",
|
|
39782
|
+
form: "single",
|
|
39783
|
+
optional: false
|
|
39784
|
+
}],
|
|
39593
39785
|
"ptz.getOptions": [{
|
|
39594
39786
|
name: "deviceId",
|
|
39595
39787
|
form: "single",
|
|
@@ -39630,6 +39822,16 @@ Object.freeze({
|
|
|
39630
39822
|
form: "single",
|
|
39631
39823
|
optional: false
|
|
39632
39824
|
}],
|
|
39825
|
+
"ptz.setHomePreset": [{
|
|
39826
|
+
name: "deviceId",
|
|
39827
|
+
form: "single",
|
|
39828
|
+
optional: false
|
|
39829
|
+
}],
|
|
39830
|
+
"ptz.setHomeReturnSeconds": [{
|
|
39831
|
+
name: "deviceId",
|
|
39832
|
+
form: "single",
|
|
39833
|
+
optional: false
|
|
39834
|
+
}],
|
|
39633
39835
|
"ptz.stop": [{
|
|
39634
39836
|
name: "deviceId",
|
|
39635
39837
|
form: "single",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h as e, l as t, u as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
|
|
2
|
-
import { o as i, s as a } from "./responsive-
|
|
2
|
+
import { o as i, s as a } from "./responsive-C6dBVCr7.mjs";
|
|
3
3
|
import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
4
4
|
var l = a("chevron-down", [["path", {
|
|
5
5
|
d: "m6 9 6 6 6-6",
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CigmnmQE.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as e, g as t, h as n, l as r, n as i, p as a, r as o, t as s, u as c, y as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
3
|
-
import { n as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
3
|
+
import { n as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CKEe1Nbx.mjs";
|
|
4
4
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
5
5
|
l();
|
|
6
6
|
var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
|