camstack 1.2.169 → 1.2.171
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.
|
@@ -14522,7 +14522,7 @@ function date4(params) {
|
|
|
14522
14522
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14523
14523
|
config(en_default());
|
|
14524
14524
|
|
|
14525
|
-
// ../types/dist/sleep-
|
|
14525
|
+
// ../types/dist/sleep-Bs3xPtSh.mjs
|
|
14526
14526
|
var AUDIO_CHUNK_FORMATS = [
|
|
14527
14527
|
"f32le",
|
|
14528
14528
|
"pcmu",
|
|
@@ -19073,6 +19073,24 @@ var GetStreamWithCodecInputSchema = external_exports.object({
|
|
|
19073
19073
|
});
|
|
19074
19074
|
var RtpSourceSchema = external_exports.object({
|
|
19075
19075
|
url: external_exports.string(),
|
|
19076
|
+
/**
|
|
19077
|
+
* The SENTRY counterpart of {@link url} — the dial that asks for the stream
|
|
19078
|
+
* WITHOUT asking for the camera — or `null` when this camera offers none.
|
|
19079
|
+
*
|
|
19080
|
+
* The broker answers it because the broker is the only thing that can:
|
|
19081
|
+
* eligibility is `sentryEligible` (a BATTERY camera that DECLARES the signals
|
|
19082
|
+
* cap), asked of facts only the broker holds. A consumer re-deriving it from
|
|
19083
|
+
* cap bindings would be a second authority, and two authorities on the same
|
|
19084
|
+
* question is how a composite camera ends up dialling a sleeping camera
|
|
19085
|
+
* because its own copy of the rule was a release behind.
|
|
19086
|
+
*
|
|
19087
|
+
* `null` is a real answer and is never a live url in disguise: a consumer
|
|
19088
|
+
* that silently fell back to {@link url} would perform exactly the wake this
|
|
19089
|
+
* field exists to prevent. Only a PASSTHROUGH acquisition can offer one — a
|
|
19090
|
+
* transcode hands back an egress the broker is feeding itself, which has no
|
|
19091
|
+
* sentry counterpart.
|
|
19092
|
+
*/
|
|
19093
|
+
sentryUrl: external_exports.string().nullable().optional(),
|
|
19076
19094
|
videoCodec: external_exports.enum(["H264", "H265"]),
|
|
19077
19095
|
audioCodec: external_exports.string(),
|
|
19078
19096
|
resolution: external_exports.object({
|
|
@@ -36884,6 +36902,84 @@ var motionTriggerCapability = {
|
|
|
36884
36902
|
*/
|
|
36885
36903
|
durability: "session"
|
|
36886
36904
|
};
|
|
36905
|
+
var GridNormalizedRectSchema = external_exports.object({
|
|
36906
|
+
x: external_exports.number().min(0).max(1),
|
|
36907
|
+
y: external_exports.number().min(0).max(1),
|
|
36908
|
+
width: external_exports.number().gt(0).max(1),
|
|
36909
|
+
height: external_exports.number().gt(0).max(1)
|
|
36910
|
+
});
|
|
36911
|
+
var GridLayoutCellSchema = external_exports.object({
|
|
36912
|
+
deviceId: external_exports.number().int().positive(),
|
|
36913
|
+
/** The part of the SOURCE taken, normalized against the source. */
|
|
36914
|
+
source: GridNormalizedRectSchema,
|
|
36915
|
+
/** Where it lands, normalized against the CANVAS. */
|
|
36916
|
+
cell: GridNormalizedRectSchema
|
|
36917
|
+
});
|
|
36918
|
+
var GridProfileOfferSchema = external_exports.object({
|
|
36919
|
+
profile: external_exports.enum([
|
|
36920
|
+
"high",
|
|
36921
|
+
"mid",
|
|
36922
|
+
"low"
|
|
36923
|
+
]),
|
|
36924
|
+
offered: external_exports.boolean(),
|
|
36925
|
+
/** Sources that cannot serve it. Empty when it is offered, or when there are no cells. */
|
|
36926
|
+
missingSources: external_exports.array(external_exports.number().int().positive())
|
|
36927
|
+
});
|
|
36928
|
+
var GridLayoutViewSchema = external_exports.object({
|
|
36929
|
+
/** The persisted grid row this camera was declared from. */
|
|
36930
|
+
instanceId: external_exports.string(),
|
|
36931
|
+
deviceId: external_exports.number().int().nonnegative(),
|
|
36932
|
+
name: external_exports.string(),
|
|
36933
|
+
/** The canvas the operator laid out — this grid's `high`. mid/low are scaled from it. */
|
|
36934
|
+
width: external_exports.number().int(),
|
|
36935
|
+
height: external_exports.number().int(),
|
|
36936
|
+
fps: external_exports.number().int(),
|
|
36937
|
+
cells: external_exports.array(GridLayoutCellSchema),
|
|
36938
|
+
/** What the catalog will publish, and what it refuses to. Read-only. */
|
|
36939
|
+
profiles: external_exports.array(GridProfileOfferSchema)
|
|
36940
|
+
});
|
|
36941
|
+
var GridLayoutPatchSchema = external_exports.object({
|
|
36942
|
+
deviceId: external_exports.number().int().nonnegative(),
|
|
36943
|
+
name: external_exports.string().min(1).max(160).optional(),
|
|
36944
|
+
width: external_exports.number().int().min(160).max(7680).optional(),
|
|
36945
|
+
height: external_exports.number().int().min(120).max(4320).optional(),
|
|
36946
|
+
fps: external_exports.number().int().min(1).max(60).optional(),
|
|
36947
|
+
/**
|
|
36948
|
+
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
36949
|
+
* editor does not have, and a half-applied layout is a picture nobody asked
|
|
36950
|
+
* for.
|
|
36951
|
+
*/
|
|
36952
|
+
cells: external_exports.array(GridLayoutCellSchema).max(16)
|
|
36953
|
+
});
|
|
36954
|
+
var cameraGridLayoutCapability = {
|
|
36955
|
+
name: "camera-grid-layout",
|
|
36956
|
+
scope: "device",
|
|
36957
|
+
deviceNative: true,
|
|
36958
|
+
mode: "singleton",
|
|
36959
|
+
deviceTypes: [DeviceType.Camera],
|
|
36960
|
+
deviceConfig: { ui: {
|
|
36961
|
+
kind: "widget",
|
|
36962
|
+
widgetId: "host/camera-grid-layout",
|
|
36963
|
+
tab: "streaming",
|
|
36964
|
+
label: "Grid layout",
|
|
36965
|
+
order: 20
|
|
36966
|
+
} },
|
|
36967
|
+
methods: {
|
|
36968
|
+
/**
|
|
36969
|
+
* The grid behind this device.
|
|
36970
|
+
*
|
|
36971
|
+
* `null` means ANSWERED and this camera is not a grid — not "not yet
|
|
36972
|
+
* known". The widget renders its "this is not a grid camera" state only
|
|
36973
|
+
* from this answer, never from an unresolved query (D315).
|
|
36974
|
+
*/
|
|
36975
|
+
getLayout: method(external_exports.object({ deviceId: external_exports.number().int().nonnegative() }), GridLayoutViewSchema.nullable(), { auth: "admin" }),
|
|
36976
|
+
/** Write the geometry back. Returns the grid as it now stands, profiles included. */
|
|
36977
|
+
saveLayout: method(GridLayoutPatchSchema, GridLayoutViewSchema, {
|
|
36978
|
+
kind: "mutation",
|
|
36979
|
+
auth: "admin"
|
|
36980
|
+
})
|
|
36981
|
+
}
|
|
36982
|
+
};
|
|
36887
36983
|
var MotionZoneRegionSchema = external_exports.object({
|
|
36888
36984
|
id: external_exports.number(),
|
|
36889
36985
|
enabled: external_exports.boolean(),
|
|
@@ -38767,6 +38863,10 @@ var PtzHomePresetSchema = external_exports.object({
|
|
|
38767
38863
|
"none"
|
|
38768
38864
|
])
|
|
38769
38865
|
});
|
|
38866
|
+
var PtzHomeReturnSchema = external_exports.object({
|
|
38867
|
+
enabled: external_exports.boolean(),
|
|
38868
|
+
seconds: external_exports.number().int()
|
|
38869
|
+
});
|
|
38770
38870
|
var ptzCapability = {
|
|
38771
38871
|
name: "ptz",
|
|
38772
38872
|
scope: "device",
|
|
@@ -38849,18 +38949,25 @@ var ptzCapability = {
|
|
|
38849
38949
|
auth: "admin"
|
|
38850
38950
|
}),
|
|
38851
38951
|
/**
|
|
38852
|
-
*
|
|
38853
|
-
* `null` when it has no such behaviour.
|
|
38952
|
+
* Whether the camera returns home on its own when left idle, and after how
|
|
38953
|
+
* long. `null` when it has no such behaviour at all.
|
|
38854
38954
|
*
|
|
38855
38955
|
* Reolink's guard point carries one (`timeout`, freely settable in
|
|
38856
38956
|
* seconds). It is a real function of the camera that we did not expose at
|
|
38857
38957
|
* all, and it belongs next to the home it governs rather than in a vendor
|
|
38858
38958
|
* settings page nobody associates with Home.
|
|
38859
38959
|
*/
|
|
38860
|
-
|
|
38861
|
-
/**
|
|
38862
|
-
|
|
38960
|
+
getHomeReturn: method(external_exports.object({ deviceId: external_exports.number() }), PtzHomeReturnSchema.nullable()),
|
|
38961
|
+
/**
|
|
38962
|
+
* Set both together. Refused by a camera with no idle-return behaviour.
|
|
38963
|
+
*
|
|
38964
|
+
* They travel together for the same reason they are read together: the
|
|
38965
|
+
* underlying write carries both, so setting one alone means reading the
|
|
38966
|
+
* other back first and racing whoever else is writing.
|
|
38967
|
+
*/
|
|
38968
|
+
setHomeReturn: method(external_exports.object({
|
|
38863
38969
|
deviceId: external_exports.number(),
|
|
38970
|
+
enabled: external_exports.boolean(),
|
|
38864
38971
|
seconds: external_exports.number().int().min(0).max(3600)
|
|
38865
38972
|
}), external_exports.void(), {
|
|
38866
38973
|
kind: "mutation",
|
|
@@ -42551,6 +42658,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
42551
42658
|
addonId: null,
|
|
42552
42659
|
access: "view"
|
|
42553
42660
|
},
|
|
42661
|
+
"cameraGridLayout.getLayout": {
|
|
42662
|
+
capName: "camera-grid-layout",
|
|
42663
|
+
capScope: "device",
|
|
42664
|
+
addonId: null,
|
|
42665
|
+
access: "view"
|
|
42666
|
+
},
|
|
42667
|
+
"cameraGridLayout.saveLayout": {
|
|
42668
|
+
capName: "camera-grid-layout",
|
|
42669
|
+
capScope: "device",
|
|
42670
|
+
addonId: null,
|
|
42671
|
+
access: "create"
|
|
42672
|
+
},
|
|
42554
42673
|
"cameraStreams.getBrokerStreams": {
|
|
42555
42674
|
capName: "camera-streams",
|
|
42556
42675
|
capScope: "device",
|
|
@@ -46301,7 +46420,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
46301
46420
|
addonId: null,
|
|
46302
46421
|
access: "view"
|
|
46303
46422
|
},
|
|
46304
|
-
"ptz.
|
|
46423
|
+
"ptz.getHomeReturn": {
|
|
46305
46424
|
capName: "ptz",
|
|
46306
46425
|
capScope: "device",
|
|
46307
46426
|
addonId: null,
|
|
@@ -46361,7 +46480,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
46361
46480
|
addonId: null,
|
|
46362
46481
|
access: "create"
|
|
46363
46482
|
},
|
|
46364
|
-
"ptz.
|
|
46483
|
+
"ptz.setHomeReturn": {
|
|
46365
46484
|
capName: "ptz",
|
|
46366
46485
|
capScope: "device",
|
|
46367
46486
|
addonId: null,
|
|
@@ -48250,6 +48369,21 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
48250
48369
|
form: "single",
|
|
48251
48370
|
optional: false
|
|
48252
48371
|
}],
|
|
48372
|
+
"cameraGridLayout.getLayout": [{
|
|
48373
|
+
name: "deviceId",
|
|
48374
|
+
form: "single",
|
|
48375
|
+
optional: false
|
|
48376
|
+
}],
|
|
48377
|
+
"cameraGridLayout.saveLayout": [{
|
|
48378
|
+
name: "cells",
|
|
48379
|
+
form: "object-array",
|
|
48380
|
+
optional: false,
|
|
48381
|
+
itemField: "deviceId"
|
|
48382
|
+
}, {
|
|
48383
|
+
name: "deviceId",
|
|
48384
|
+
form: "single",
|
|
48385
|
+
optional: false
|
|
48386
|
+
}],
|
|
48253
48387
|
"cameraStreams.getBrokerStreams": [{
|
|
48254
48388
|
name: "deviceId",
|
|
48255
48389
|
form: "single",
|
|
@@ -49550,7 +49684,7 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
49550
49684
|
form: "single",
|
|
49551
49685
|
optional: false
|
|
49552
49686
|
}],
|
|
49553
|
-
"ptz.
|
|
49687
|
+
"ptz.getHomeReturn": [{
|
|
49554
49688
|
name: "deviceId",
|
|
49555
49689
|
form: "single",
|
|
49556
49690
|
optional: false
|
|
@@ -49600,7 +49734,7 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
49600
49734
|
form: "single",
|
|
49601
49735
|
optional: false
|
|
49602
49736
|
}],
|
|
49603
|
-
"ptz.
|
|
49737
|
+
"ptz.setHomeReturn": [{
|
|
49604
49738
|
name: "deviceId",
|
|
49605
49739
|
form: "single",
|
|
49606
49740
|
optional: false
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runDiscover
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SLJH5H7K.js";
|
|
5
5
|
import "./chunk-LMMQX4CK.js";
|
|
6
6
|
|
|
7
7
|
// src/cli.ts
|
|
@@ -38,7 +38,7 @@ async function runServe(args) {
|
|
|
38
38
|
...typeof values.data === "string" ? { data: values.data } : {}
|
|
39
39
|
};
|
|
40
40
|
Object.assign(process.env, buildServeEnv(opts));
|
|
41
|
-
await import("./launcher-
|
|
41
|
+
await import("./launcher-YO2KRQNJ.js");
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// src/commands/agent.ts
|
|
@@ -83,7 +83,7 @@ async function runAgent(args) {
|
|
|
83
83
|
...typeof values.port === "string" ? { port: values.port } : {}
|
|
84
84
|
};
|
|
85
85
|
Object.assign(process.env, buildAgentEnv(opts));
|
|
86
|
-
await import("./launcher-
|
|
86
|
+
await import("./launcher-YO2KRQNJ.js");
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// src/commands/setup.ts
|
|
@@ -1140,7 +1140,7 @@ function isUnknown(_value) {
|
|
|
1140
1140
|
return true;
|
|
1141
1141
|
}
|
|
1142
1142
|
async function resolveServerInteractive(presetNamespace) {
|
|
1143
|
-
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-
|
|
1143
|
+
const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-IHA2UVS3.js");
|
|
1144
1144
|
if (presetNamespace) {
|
|
1145
1145
|
const spinner4 = clack.spinner();
|
|
1146
1146
|
spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
|
|
@@ -23742,9 +23742,9 @@ var require_zod = __commonJS({
|
|
|
23742
23742
|
}
|
|
23743
23743
|
});
|
|
23744
23744
|
|
|
23745
|
-
// ../system/dist/dist-
|
|
23746
|
-
var
|
|
23747
|
-
"../system/dist/dist-
|
|
23745
|
+
// ../system/dist/dist-B9y-3rme.js
|
|
23746
|
+
var require_dist_B9y_3rme = __commonJS({
|
|
23747
|
+
"../system/dist/dist-B9y-3rme.js"(exports) {
|
|
23748
23748
|
"use strict";
|
|
23749
23749
|
var zod = require_zod();
|
|
23750
23750
|
var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
|
|
@@ -29841,6 +29841,24 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
29841
29841
|
});
|
|
29842
29842
|
var RtpSourceSchema = zod.z.object({
|
|
29843
29843
|
url: zod.z.string(),
|
|
29844
|
+
/**
|
|
29845
|
+
* The SENTRY counterpart of {@link url} — the dial that asks for the stream
|
|
29846
|
+
* WITHOUT asking for the camera — or `null` when this camera offers none.
|
|
29847
|
+
*
|
|
29848
|
+
* The broker answers it because the broker is the only thing that can:
|
|
29849
|
+
* eligibility is `sentryEligible` (a BATTERY camera that DECLARES the signals
|
|
29850
|
+
* cap), asked of facts only the broker holds. A consumer re-deriving it from
|
|
29851
|
+
* cap bindings would be a second authority, and two authorities on the same
|
|
29852
|
+
* question is how a composite camera ends up dialling a sleeping camera
|
|
29853
|
+
* because its own copy of the rule was a release behind.
|
|
29854
|
+
*
|
|
29855
|
+
* `null` is a real answer and is never a live url in disguise: a consumer
|
|
29856
|
+
* that silently fell back to {@link url} would perform exactly the wake this
|
|
29857
|
+
* field exists to prevent. Only a PASSTHROUGH acquisition can offer one — a
|
|
29858
|
+
* transcode hands back an egress the broker is feeding itself, which has no
|
|
29859
|
+
* sentry counterpart.
|
|
29860
|
+
*/
|
|
29861
|
+
sentryUrl: zod.z.string().nullable().optional(),
|
|
29844
29862
|
videoCodec: zod.z.enum(["H264", "H265"]),
|
|
29845
29863
|
audioCodec: zod.z.string(),
|
|
29846
29864
|
resolution: zod.z.object({
|
|
@@ -47561,6 +47579,84 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
47561
47579
|
*/
|
|
47562
47580
|
durability: "session"
|
|
47563
47581
|
};
|
|
47582
|
+
var GridNormalizedRectSchema = zod.z.object({
|
|
47583
|
+
x: zod.z.number().min(0).max(1),
|
|
47584
|
+
y: zod.z.number().min(0).max(1),
|
|
47585
|
+
width: zod.z.number().gt(0).max(1),
|
|
47586
|
+
height: zod.z.number().gt(0).max(1)
|
|
47587
|
+
});
|
|
47588
|
+
var GridLayoutCellSchema = zod.z.object({
|
|
47589
|
+
deviceId: zod.z.number().int().positive(),
|
|
47590
|
+
/** The part of the SOURCE taken, normalized against the source. */
|
|
47591
|
+
source: GridNormalizedRectSchema,
|
|
47592
|
+
/** Where it lands, normalized against the CANVAS. */
|
|
47593
|
+
cell: GridNormalizedRectSchema
|
|
47594
|
+
});
|
|
47595
|
+
var GridProfileOfferSchema = zod.z.object({
|
|
47596
|
+
profile: zod.z.enum([
|
|
47597
|
+
"high",
|
|
47598
|
+
"mid",
|
|
47599
|
+
"low"
|
|
47600
|
+
]),
|
|
47601
|
+
offered: zod.z.boolean(),
|
|
47602
|
+
/** Sources that cannot serve it. Empty when it is offered, or when there are no cells. */
|
|
47603
|
+
missingSources: zod.z.array(zod.z.number().int().positive())
|
|
47604
|
+
});
|
|
47605
|
+
var GridLayoutViewSchema = zod.z.object({
|
|
47606
|
+
/** The persisted grid row this camera was declared from. */
|
|
47607
|
+
instanceId: zod.z.string(),
|
|
47608
|
+
deviceId: zod.z.number().int().nonnegative(),
|
|
47609
|
+
name: zod.z.string(),
|
|
47610
|
+
/** The canvas the operator laid out — this grid's `high`. mid/low are scaled from it. */
|
|
47611
|
+
width: zod.z.number().int(),
|
|
47612
|
+
height: zod.z.number().int(),
|
|
47613
|
+
fps: zod.z.number().int(),
|
|
47614
|
+
cells: zod.z.array(GridLayoutCellSchema),
|
|
47615
|
+
/** What the catalog will publish, and what it refuses to. Read-only. */
|
|
47616
|
+
profiles: zod.z.array(GridProfileOfferSchema)
|
|
47617
|
+
});
|
|
47618
|
+
var GridLayoutPatchSchema = zod.z.object({
|
|
47619
|
+
deviceId: zod.z.number().int().nonnegative(),
|
|
47620
|
+
name: zod.z.string().min(1).max(160).optional(),
|
|
47621
|
+
width: zod.z.number().int().min(160).max(7680).optional(),
|
|
47622
|
+
height: zod.z.number().int().min(120).max(4320).optional(),
|
|
47623
|
+
fps: zod.z.number().int().min(1).max(60).optional(),
|
|
47624
|
+
/**
|
|
47625
|
+
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
47626
|
+
* editor does not have, and a half-applied layout is a picture nobody asked
|
|
47627
|
+
* for.
|
|
47628
|
+
*/
|
|
47629
|
+
cells: zod.z.array(GridLayoutCellSchema).max(16)
|
|
47630
|
+
});
|
|
47631
|
+
var cameraGridLayoutCapability = {
|
|
47632
|
+
name: "camera-grid-layout",
|
|
47633
|
+
scope: "device",
|
|
47634
|
+
deviceNative: true,
|
|
47635
|
+
mode: "singleton",
|
|
47636
|
+
deviceTypes: [DeviceType.Camera],
|
|
47637
|
+
deviceConfig: { ui: {
|
|
47638
|
+
kind: "widget",
|
|
47639
|
+
widgetId: "host/camera-grid-layout",
|
|
47640
|
+
tab: "streaming",
|
|
47641
|
+
label: "Grid layout",
|
|
47642
|
+
order: 20
|
|
47643
|
+
} },
|
|
47644
|
+
methods: {
|
|
47645
|
+
/**
|
|
47646
|
+
* The grid behind this device.
|
|
47647
|
+
*
|
|
47648
|
+
* `null` means ANSWERED and this camera is not a grid — not "not yet
|
|
47649
|
+
* known". The widget renders its "this is not a grid camera" state only
|
|
47650
|
+
* from this answer, never from an unresolved query (D315).
|
|
47651
|
+
*/
|
|
47652
|
+
getLayout: method(zod.z.object({ deviceId: zod.z.number().int().nonnegative() }), GridLayoutViewSchema.nullable(), { auth: "admin" }),
|
|
47653
|
+
/** Write the geometry back. Returns the grid as it now stands, profiles included. */
|
|
47654
|
+
saveLayout: method(GridLayoutPatchSchema, GridLayoutViewSchema, {
|
|
47655
|
+
kind: "mutation",
|
|
47656
|
+
auth: "admin"
|
|
47657
|
+
})
|
|
47658
|
+
}
|
|
47659
|
+
};
|
|
47564
47660
|
var MotionZoneRegionSchema = zod.z.object({
|
|
47565
47661
|
id: zod.z.number(),
|
|
47566
47662
|
enabled: zod.z.boolean(),
|
|
@@ -49442,6 +49538,10 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
49442
49538
|
"none"
|
|
49443
49539
|
])
|
|
49444
49540
|
});
|
|
49541
|
+
var PtzHomeReturnSchema = zod.z.object({
|
|
49542
|
+
enabled: zod.z.boolean(),
|
|
49543
|
+
seconds: zod.z.number().int()
|
|
49544
|
+
});
|
|
49445
49545
|
var ptzCapability = {
|
|
49446
49546
|
name: "ptz",
|
|
49447
49547
|
scope: "device",
|
|
@@ -49524,18 +49624,25 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
49524
49624
|
auth: "admin"
|
|
49525
49625
|
}),
|
|
49526
49626
|
/**
|
|
49527
|
-
*
|
|
49528
|
-
* `null` when it has no such behaviour.
|
|
49627
|
+
* Whether the camera returns home on its own when left idle, and after how
|
|
49628
|
+
* long. `null` when it has no such behaviour at all.
|
|
49529
49629
|
*
|
|
49530
49630
|
* Reolink's guard point carries one (`timeout`, freely settable in
|
|
49531
49631
|
* seconds). It is a real function of the camera that we did not expose at
|
|
49532
49632
|
* all, and it belongs next to the home it governs rather than in a vendor
|
|
49533
49633
|
* settings page nobody associates with Home.
|
|
49534
49634
|
*/
|
|
49535
|
-
|
|
49536
|
-
/**
|
|
49537
|
-
|
|
49635
|
+
getHomeReturn: method(zod.z.object({ deviceId: zod.z.number() }), PtzHomeReturnSchema.nullable()),
|
|
49636
|
+
/**
|
|
49637
|
+
* Set both together. Refused by a camera with no idle-return behaviour.
|
|
49638
|
+
*
|
|
49639
|
+
* They travel together for the same reason they are read together: the
|
|
49640
|
+
* underlying write carries both, so setting one alone means reading the
|
|
49641
|
+
* other back first and racing whoever else is writing.
|
|
49642
|
+
*/
|
|
49643
|
+
setHomeReturn: method(zod.z.object({
|
|
49538
49644
|
deviceId: zod.z.number(),
|
|
49645
|
+
enabled: zod.z.boolean(),
|
|
49539
49646
|
seconds: zod.z.number().int().min(0).max(3600)
|
|
49540
49647
|
}), zod.z.void(), {
|
|
49541
49648
|
kind: "mutation",
|
|
@@ -53203,6 +53310,7 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
53203
53310
|
brokerCapability,
|
|
53204
53311
|
buttonCapability,
|
|
53205
53312
|
cameraCredentialsCapability,
|
|
53313
|
+
cameraGridLayoutCapability,
|
|
53206
53314
|
cameraPipelineConfigCapability,
|
|
53207
53315
|
cameraStreamsCapability,
|
|
53208
53316
|
carbonMonoxideCapability,
|
|
@@ -54056,6 +54164,18 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
54056
54164
|
addonId: null,
|
|
54057
54165
|
access: "view"
|
|
54058
54166
|
},
|
|
54167
|
+
"cameraGridLayout.getLayout": {
|
|
54168
|
+
capName: "camera-grid-layout",
|
|
54169
|
+
capScope: "device",
|
|
54170
|
+
addonId: null,
|
|
54171
|
+
access: "view"
|
|
54172
|
+
},
|
|
54173
|
+
"cameraGridLayout.saveLayout": {
|
|
54174
|
+
capName: "camera-grid-layout",
|
|
54175
|
+
capScope: "device",
|
|
54176
|
+
addonId: null,
|
|
54177
|
+
access: "create"
|
|
54178
|
+
},
|
|
54059
54179
|
"cameraStreams.getBrokerStreams": {
|
|
54060
54180
|
capName: "camera-streams",
|
|
54061
54181
|
capScope: "device",
|
|
@@ -57806,7 +57926,7 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
57806
57926
|
addonId: null,
|
|
57807
57927
|
access: "view"
|
|
57808
57928
|
},
|
|
57809
|
-
"ptz.
|
|
57929
|
+
"ptz.getHomeReturn": {
|
|
57810
57930
|
capName: "ptz",
|
|
57811
57931
|
capScope: "device",
|
|
57812
57932
|
addonId: null,
|
|
@@ -57866,7 +57986,7 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
57866
57986
|
addonId: null,
|
|
57867
57987
|
access: "create"
|
|
57868
57988
|
},
|
|
57869
|
-
"ptz.
|
|
57989
|
+
"ptz.setHomeReturn": {
|
|
57870
57990
|
capName: "ptz",
|
|
57871
57991
|
capScope: "device",
|
|
57872
57992
|
addonId: null,
|
|
@@ -59755,6 +59875,21 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
59755
59875
|
form: "single",
|
|
59756
59876
|
optional: false
|
|
59757
59877
|
}],
|
|
59878
|
+
"cameraGridLayout.getLayout": [{
|
|
59879
|
+
name: "deviceId",
|
|
59880
|
+
form: "single",
|
|
59881
|
+
optional: false
|
|
59882
|
+
}],
|
|
59883
|
+
"cameraGridLayout.saveLayout": [{
|
|
59884
|
+
name: "cells",
|
|
59885
|
+
form: "object-array",
|
|
59886
|
+
optional: false,
|
|
59887
|
+
itemField: "deviceId"
|
|
59888
|
+
}, {
|
|
59889
|
+
name: "deviceId",
|
|
59890
|
+
form: "single",
|
|
59891
|
+
optional: false
|
|
59892
|
+
}],
|
|
59758
59893
|
"cameraStreams.getBrokerStreams": [{
|
|
59759
59894
|
name: "deviceId",
|
|
59760
59895
|
form: "single",
|
|
@@ -61055,7 +61190,7 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
61055
61190
|
form: "single",
|
|
61056
61191
|
optional: false
|
|
61057
61192
|
}],
|
|
61058
|
-
"ptz.
|
|
61193
|
+
"ptz.getHomeReturn": [{
|
|
61059
61194
|
name: "deviceId",
|
|
61060
61195
|
form: "single",
|
|
61061
61196
|
optional: false
|
|
@@ -61105,7 +61240,7 @@ var require_dist_BG0p9Azt = __commonJS({
|
|
|
61105
61240
|
form: "single",
|
|
61106
61241
|
optional: false
|
|
61107
61242
|
}],
|
|
61108
|
-
"ptz.
|
|
61243
|
+
"ptz.setHomeReturn": [{
|
|
61109
61244
|
name: "deviceId",
|
|
61110
61245
|
form: "single",
|
|
61111
61246
|
optional: false
|
|
@@ -63137,7 +63272,7 @@ var require_alerts_addon = __commonJS({
|
|
|
63137
63272
|
[Symbol.toStringTag]: { value: "Module" }
|
|
63138
63273
|
});
|
|
63139
63274
|
require_chunk_Cek0wNdY();
|
|
63140
|
-
var require_dist10 =
|
|
63275
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
63141
63276
|
function selectExpired(alerts, cutoffMs) {
|
|
63142
63277
|
return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
|
|
63143
63278
|
}
|
|
@@ -63956,7 +64091,7 @@ var require_console_logging = __commonJS({
|
|
|
63956
64091
|
[Symbol.toStringTag]: { value: "Module" }
|
|
63957
64092
|
});
|
|
63958
64093
|
require_chunk_Cek0wNdY();
|
|
63959
|
-
var require_dist10 =
|
|
64094
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
63960
64095
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
63961
64096
|
var LEVEL_RANK = {
|
|
63962
64097
|
debug: 0,
|
|
@@ -64050,7 +64185,7 @@ var require_core_blocks_addon = __commonJS({
|
|
|
64050
64185
|
"use strict";
|
|
64051
64186
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
64052
64187
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
64053
|
-
var require_dist10 =
|
|
64188
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
64054
64189
|
var node_crypto = __require("crypto");
|
|
64055
64190
|
var node_fs_promises = __require("fs/promises");
|
|
64056
64191
|
node_fs_promises = require_chunk.__toESM(node_fs_promises);
|
|
@@ -64947,11 +65082,11 @@ var require_core_blocks = __commonJS({
|
|
|
64947
65082
|
}
|
|
64948
65083
|
});
|
|
64949
65084
|
|
|
64950
|
-
// ../system/dist/retired-settings-keys-
|
|
64951
|
-
var
|
|
64952
|
-
"../system/dist/retired-settings-keys-
|
|
65085
|
+
// ../system/dist/retired-settings-keys-CnMg7wvS.js
|
|
65086
|
+
var require_retired_settings_keys_CnMg7wvS = __commonJS({
|
|
65087
|
+
"../system/dist/retired-settings-keys-CnMg7wvS.js"(exports) {
|
|
64953
65088
|
"use strict";
|
|
64954
|
-
var require_dist10 =
|
|
65089
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
64955
65090
|
function settingsStoreIsAuthoritativeHere(env) {
|
|
64956
65091
|
const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
|
|
64957
65092
|
return raw === "" || raw === "hub";
|
|
@@ -67228,8 +67363,8 @@ var require_device_manager_addon = __commonJS({
|
|
|
67228
67363
|
[Symbol.toStringTag]: { value: "Module" }
|
|
67229
67364
|
});
|
|
67230
67365
|
require_chunk_Cek0wNdY();
|
|
67231
|
-
var require_dist10 =
|
|
67232
|
-
var require_retired_settings_keys =
|
|
67366
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
67367
|
+
var require_retired_settings_keys = require_retired_settings_keys_CnMg7wvS();
|
|
67233
67368
|
var node_crypto = __require("crypto");
|
|
67234
67369
|
var _camstack_types_node = require_node();
|
|
67235
67370
|
var JOB_HISTORY = 20;
|
|
@@ -73237,7 +73372,7 @@ var require_hub_forwarder = __commonJS({
|
|
|
73237
73372
|
[Symbol.toStringTag]: { value: "Module" }
|
|
73238
73373
|
});
|
|
73239
73374
|
require_chunk_Cek0wNdY();
|
|
73240
|
-
var require_dist10 =
|
|
73375
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
73241
73376
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
73242
73377
|
var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
|
|
73243
73378
|
var HubForwarderDestination = class {
|
|
@@ -73374,7 +73509,7 @@ var require_liveness_monitor_addon = __commonJS({
|
|
|
73374
73509
|
"use strict";
|
|
73375
73510
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
73376
73511
|
require_chunk_Cek0wNdY();
|
|
73377
|
-
var require_dist10 =
|
|
73512
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
73378
73513
|
var NO_DEVICES = "liveness:no-devices";
|
|
73379
73514
|
var ALL_OFFLINE = "liveness:all-devices-offline";
|
|
73380
73515
|
var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
|
|
@@ -73570,7 +73705,7 @@ var require_local_auth_addon = __commonJS({
|
|
|
73570
73705
|
[Symbol.toStringTag]: { value: "Module" }
|
|
73571
73706
|
});
|
|
73572
73707
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
73573
|
-
var require_dist10 =
|
|
73708
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
73574
73709
|
var node_crypto = __require("crypto");
|
|
73575
73710
|
node_crypto = require_chunk.__toESM(node_crypto);
|
|
73576
73711
|
var crypto$1 = __require("crypto");
|
|
@@ -81383,7 +81518,7 @@ var require_loki_logging = __commonJS({
|
|
|
81383
81518
|
[Symbol.toStringTag]: { value: "Module" }
|
|
81384
81519
|
});
|
|
81385
81520
|
require_chunk_Cek0wNdY();
|
|
81386
|
-
var require_dist10 =
|
|
81521
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
81387
81522
|
function sanitizeLabelName(raw) {
|
|
81388
81523
|
const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
|
|
81389
81524
|
return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
|
|
@@ -81970,7 +82105,7 @@ var require_native_metrics_addon = __commonJS({
|
|
|
81970
82105
|
[Symbol.toStringTag]: { value: "Module" }
|
|
81971
82106
|
});
|
|
81972
82107
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
81973
|
-
var require_dist10 =
|
|
82108
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
81974
82109
|
var node_fs_promises = __require("fs/promises");
|
|
81975
82110
|
var node_fs = __require("fs");
|
|
81976
82111
|
node_fs = require_chunk.__toESM(node_fs);
|
|
@@ -84723,7 +84858,7 @@ var require_filesystem_storage_addon = __commonJS({
|
|
|
84723
84858
|
[Symbol.toStringTag]: { value: "Module" }
|
|
84724
84859
|
});
|
|
84725
84860
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
84726
|
-
var require_dist10 =
|
|
84861
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
84727
84862
|
var node_crypto = __require("crypto");
|
|
84728
84863
|
var node_fs_promises = __require("fs/promises");
|
|
84729
84864
|
var node_path = __require("path");
|
|
@@ -85950,8 +86085,8 @@ var require_sqlite_settings_addon = __commonJS({
|
|
|
85950
86085
|
[Symbol.toStringTag]: { value: "Module" }
|
|
85951
86086
|
});
|
|
85952
86087
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
85953
|
-
var require_dist10 =
|
|
85954
|
-
var require_retired_settings_keys =
|
|
86088
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
86089
|
+
var require_retired_settings_keys = require_retired_settings_keys_CnMg7wvS();
|
|
85955
86090
|
var require_wal_checkpoint_policy = require_wal_checkpoint_policy_CCJZngds();
|
|
85956
86091
|
var node_crypto = __require("crypto");
|
|
85957
86092
|
var node_path = __require("path");
|
|
@@ -88738,7 +88873,7 @@ var require_storage_orchestrator_addon = __commonJS({
|
|
|
88738
88873
|
[Symbol.toStringTag]: { value: "Module" }
|
|
88739
88874
|
});
|
|
88740
88875
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
88741
|
-
var require_dist10 =
|
|
88876
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
88742
88877
|
var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
|
|
88743
88878
|
var zod = require_zod();
|
|
88744
88879
|
var node_crypto = __require("crypto");
|
|
@@ -92465,7 +92600,7 @@ var require_system_config_addon = __commonJS({
|
|
|
92465
92600
|
[Symbol.toStringTag]: { value: "Module" }
|
|
92466
92601
|
});
|
|
92467
92602
|
require_chunk_Cek0wNdY();
|
|
92468
|
-
var require_dist10 =
|
|
92603
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
92469
92604
|
var SECTION_TITLES = {
|
|
92470
92605
|
server: "Server",
|
|
92471
92606
|
auth: "Authentication"
|
|
@@ -110526,7 +110661,7 @@ var require_winston_logging = __commonJS({
|
|
|
110526
110661
|
[Symbol.toStringTag]: { value: "Module" }
|
|
110527
110662
|
});
|
|
110528
110663
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
110529
|
-
var require_dist10 =
|
|
110664
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
110530
110665
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
110531
110666
|
var node_path = __require("path");
|
|
110532
110667
|
node_path = require_chunk.__toESM(node_path);
|
|
@@ -112564,9 +112699,9 @@ var require_event_category_BVfsrBYA = __commonJS({
|
|
|
112564
112699
|
}
|
|
112565
112700
|
});
|
|
112566
112701
|
|
|
112567
|
-
// ../types/dist/sleep-
|
|
112568
|
-
var
|
|
112569
|
-
"../types/dist/sleep-
|
|
112702
|
+
// ../types/dist/sleep-OPlow2a9.js
|
|
112703
|
+
var require_sleep_OPlow2a9 = __commonJS({
|
|
112704
|
+
"../types/dist/sleep-OPlow2a9.js"(exports) {
|
|
112570
112705
|
"use strict";
|
|
112571
112706
|
var require_event_category = require_event_category_BVfsrBYA();
|
|
112572
112707
|
var zod = require_zod();
|
|
@@ -115154,6 +115289,10 @@ var require_sleep_WeJUxTv = __commonJS({
|
|
|
115154
115289
|
getCredentials: (input) => dispatch("camera-credentials", "cameraCredentials", "getCredentials", "query", input),
|
|
115155
115290
|
getStatus: (input) => dispatch("camera-credentials", "cameraCredentials", "getStatus", "query", input)
|
|
115156
115291
|
},
|
|
115292
|
+
cameraGridLayout: {
|
|
115293
|
+
getLayout: (input) => dispatch("camera-grid-layout", "cameraGridLayout", "getLayout", "query", input),
|
|
115294
|
+
saveLayout: (input) => dispatch("camera-grid-layout", "cameraGridLayout", "saveLayout", "mutation", input)
|
|
115295
|
+
},
|
|
115157
115296
|
cameraStreams: {
|
|
115158
115297
|
getCameraStreams: (input) => dispatch("camera-streams", "cameraStreams", "getCameraStreams", "query", input),
|
|
115159
115298
|
getBrokerStreams: (input) => dispatch("camera-streams", "cameraStreams", "getBrokerStreams", "query", input),
|
|
@@ -115472,8 +115611,8 @@ var require_sleep_WeJUxTv = __commonJS({
|
|
|
115472
115611
|
getHomePreset: (input) => dispatch("ptz", "ptz", "getHomePreset", "query", input),
|
|
115473
115612
|
setHomePreset: (input) => dispatch("ptz", "ptz", "setHomePreset", "mutation", input),
|
|
115474
115613
|
captureHomeHere: (input) => dispatch("ptz", "ptz", "captureHomeHere", "mutation", input),
|
|
115475
|
-
|
|
115476
|
-
|
|
115614
|
+
getHomeReturn: (input) => dispatch("ptz", "ptz", "getHomeReturn", "query", input),
|
|
115615
|
+
setHomeReturn: (input) => dispatch("ptz", "ptz", "setHomeReturn", "mutation", input),
|
|
115477
115616
|
getPosition: (input) => dispatch("ptz", "ptz", "getPosition", "query", input),
|
|
115478
115617
|
setAutofocus: (input) => dispatch("ptz", "ptz", "setAutofocus", "mutation", input),
|
|
115479
115618
|
getStatus: (input) => dispatch("ptz", "ptz", "getStatus", "query", input)
|
|
@@ -115763,6 +115902,7 @@ var require_sleep_WeJUxTv = __commonJS({
|
|
|
115763
115902
|
"brightness",
|
|
115764
115903
|
"button",
|
|
115765
115904
|
"camera-credentials",
|
|
115905
|
+
"camera-grid-layout",
|
|
115766
115906
|
"camera-pipeline-config",
|
|
115767
115907
|
"camera-streams",
|
|
115768
115908
|
"carbon-monoxide",
|
|
@@ -116472,7 +116612,7 @@ var require_addon = __commonJS({
|
|
|
116472
116612
|
"../types/dist/addon.js"(exports) {
|
|
116473
116613
|
"use strict";
|
|
116474
116614
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
116475
|
-
var require_sleep =
|
|
116615
|
+
var require_sleep = require_sleep_OPlow2a9();
|
|
116476
116616
|
var require_event_category = require_event_category_BVfsrBYA();
|
|
116477
116617
|
var require_err_msg = require_err_msg_COpsHMw2();
|
|
116478
116618
|
var CAP_INPUT_DEFAULTS = Object.freeze({
|
|
@@ -136798,7 +136938,7 @@ var require_dist3 = __commonJS({
|
|
|
136798
136938
|
"use strict";
|
|
136799
136939
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
136800
136940
|
var require_chunk = require_chunk_Cek0wNdY();
|
|
136801
|
-
var require_dist10 =
|
|
136941
|
+
var require_dist10 = require_dist_B9y_3rme();
|
|
136802
136942
|
var require_builtins_alerts_alerts_addon = require_alerts_addon();
|
|
136803
136943
|
require_alerts();
|
|
136804
136944
|
var require_formatter = require_formatter_DqAKDlvN();
|
|
@@ -217962,7 +218102,7 @@ var require_dist4 = __commonJS({
|
|
|
217962
218102
|
"../types/dist/index.js"(exports) {
|
|
217963
218103
|
"use strict";
|
|
217964
218104
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
217965
|
-
var require_sleep =
|
|
218105
|
+
var require_sleep = require_sleep_OPlow2a9();
|
|
217966
218106
|
var require_event_category = require_event_category_BVfsrBYA();
|
|
217967
218107
|
var require_canonical_hash = require_canonical_hash_CZ2JqJc3();
|
|
217968
218108
|
var require_enums2 = require_enums();
|
|
@@ -223960,6 +224100,24 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
223960
224100
|
});
|
|
223961
224101
|
var RtpSourceSchema = zod.z.object({
|
|
223962
224102
|
url: zod.z.string(),
|
|
224103
|
+
/**
|
|
224104
|
+
* The SENTRY counterpart of {@link url} — the dial that asks for the stream
|
|
224105
|
+
* WITHOUT asking for the camera — or `null` when this camera offers none.
|
|
224106
|
+
*
|
|
224107
|
+
* The broker answers it because the broker is the only thing that can:
|
|
224108
|
+
* eligibility is `sentryEligible` (a BATTERY camera that DECLARES the signals
|
|
224109
|
+
* cap), asked of facts only the broker holds. A consumer re-deriving it from
|
|
224110
|
+
* cap bindings would be a second authority, and two authorities on the same
|
|
224111
|
+
* question is how a composite camera ends up dialling a sleeping camera
|
|
224112
|
+
* because its own copy of the rule was a release behind.
|
|
224113
|
+
*
|
|
224114
|
+
* `null` is a real answer and is never a live url in disguise: a consumer
|
|
224115
|
+
* that silently fell back to {@link url} would perform exactly the wake this
|
|
224116
|
+
* field exists to prevent. Only a PASSTHROUGH acquisition can offer one — a
|
|
224117
|
+
* transcode hands back an egress the broker is feeding itself, which has no
|
|
224118
|
+
* sentry counterpart.
|
|
224119
|
+
*/
|
|
224120
|
+
sentryUrl: zod.z.string().nullable().optional(),
|
|
223963
224121
|
videoCodec: zod.z.enum(["H264", "H265"]),
|
|
223964
224122
|
audioCodec: zod.z.string(),
|
|
223965
224123
|
resolution: zod.z.object({
|
|
@@ -242829,6 +242987,84 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
242829
242987
|
*/
|
|
242830
242988
|
durability: "session"
|
|
242831
242989
|
};
|
|
242990
|
+
var GridNormalizedRectSchema = zod.z.object({
|
|
242991
|
+
x: zod.z.number().min(0).max(1),
|
|
242992
|
+
y: zod.z.number().min(0).max(1),
|
|
242993
|
+
width: zod.z.number().gt(0).max(1),
|
|
242994
|
+
height: zod.z.number().gt(0).max(1)
|
|
242995
|
+
});
|
|
242996
|
+
var GridLayoutCellSchema = zod.z.object({
|
|
242997
|
+
deviceId: zod.z.number().int().positive(),
|
|
242998
|
+
/** The part of the SOURCE taken, normalized against the source. */
|
|
242999
|
+
source: GridNormalizedRectSchema,
|
|
243000
|
+
/** Where it lands, normalized against the CANVAS. */
|
|
243001
|
+
cell: GridNormalizedRectSchema
|
|
243002
|
+
});
|
|
243003
|
+
var GridProfileOfferSchema = zod.z.object({
|
|
243004
|
+
profile: zod.z.enum([
|
|
243005
|
+
"high",
|
|
243006
|
+
"mid",
|
|
243007
|
+
"low"
|
|
243008
|
+
]),
|
|
243009
|
+
offered: zod.z.boolean(),
|
|
243010
|
+
/** Sources that cannot serve it. Empty when it is offered, or when there are no cells. */
|
|
243011
|
+
missingSources: zod.z.array(zod.z.number().int().positive())
|
|
243012
|
+
});
|
|
243013
|
+
var GridLayoutViewSchema = zod.z.object({
|
|
243014
|
+
/** The persisted grid row this camera was declared from. */
|
|
243015
|
+
instanceId: zod.z.string(),
|
|
243016
|
+
deviceId: zod.z.number().int().nonnegative(),
|
|
243017
|
+
name: zod.z.string(),
|
|
243018
|
+
/** The canvas the operator laid out — this grid's `high`. mid/low are scaled from it. */
|
|
243019
|
+
width: zod.z.number().int(),
|
|
243020
|
+
height: zod.z.number().int(),
|
|
243021
|
+
fps: zod.z.number().int(),
|
|
243022
|
+
cells: zod.z.array(GridLayoutCellSchema),
|
|
243023
|
+
/** What the catalog will publish, and what it refuses to. Read-only. */
|
|
243024
|
+
profiles: zod.z.array(GridProfileOfferSchema)
|
|
243025
|
+
});
|
|
243026
|
+
var GridLayoutPatchSchema = zod.z.object({
|
|
243027
|
+
deviceId: zod.z.number().int().nonnegative(),
|
|
243028
|
+
name: zod.z.string().min(1).max(160).optional(),
|
|
243029
|
+
width: zod.z.number().int().min(160).max(7680).optional(),
|
|
243030
|
+
height: zod.z.number().int().min(120).max(4320).optional(),
|
|
243031
|
+
fps: zod.z.number().int().min(1).max(60).optional(),
|
|
243032
|
+
/**
|
|
243033
|
+
* The whole cell list at once. A per-cell patch would need an ordering the
|
|
243034
|
+
* editor does not have, and a half-applied layout is a picture nobody asked
|
|
243035
|
+
* for.
|
|
243036
|
+
*/
|
|
243037
|
+
cells: zod.z.array(GridLayoutCellSchema).max(16)
|
|
243038
|
+
});
|
|
243039
|
+
var cameraGridLayoutCapability = {
|
|
243040
|
+
name: "camera-grid-layout",
|
|
243041
|
+
scope: "device",
|
|
243042
|
+
deviceNative: true,
|
|
243043
|
+
mode: "singleton",
|
|
243044
|
+
deviceTypes: [require_sleep.DeviceType.Camera],
|
|
243045
|
+
deviceConfig: { ui: {
|
|
243046
|
+
kind: "widget",
|
|
243047
|
+
widgetId: "host/camera-grid-layout",
|
|
243048
|
+
tab: "streaming",
|
|
243049
|
+
label: "Grid layout",
|
|
243050
|
+
order: 20
|
|
243051
|
+
} },
|
|
243052
|
+
methods: {
|
|
243053
|
+
/**
|
|
243054
|
+
* The grid behind this device.
|
|
243055
|
+
*
|
|
243056
|
+
* `null` means ANSWERED and this camera is not a grid — not "not yet
|
|
243057
|
+
* known". The widget renders its "this is not a grid camera" state only
|
|
243058
|
+
* from this answer, never from an unresolved query (D315).
|
|
243059
|
+
*/
|
|
243060
|
+
getLayout: require_sleep.method(zod.z.object({ deviceId: zod.z.number().int().nonnegative() }), GridLayoutViewSchema.nullable(), { auth: "admin" }),
|
|
243061
|
+
/** Write the geometry back. Returns the grid as it now stands, profiles included. */
|
|
243062
|
+
saveLayout: require_sleep.method(GridLayoutPatchSchema, GridLayoutViewSchema, {
|
|
243063
|
+
kind: "mutation",
|
|
243064
|
+
auth: "admin"
|
|
243065
|
+
})
|
|
243066
|
+
}
|
|
243067
|
+
};
|
|
242832
243068
|
var MotionZoneRegionSchema = zod.z.object({
|
|
242833
243069
|
id: zod.z.number(),
|
|
242834
243070
|
enabled: zod.z.boolean(),
|
|
@@ -244855,6 +245091,10 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
244855
245091
|
"none"
|
|
244856
245092
|
])
|
|
244857
245093
|
});
|
|
245094
|
+
var PtzHomeReturnSchema = zod.z.object({
|
|
245095
|
+
enabled: zod.z.boolean(),
|
|
245096
|
+
seconds: zod.z.number().int()
|
|
245097
|
+
});
|
|
244858
245098
|
var ptzCapability = {
|
|
244859
245099
|
name: "ptz",
|
|
244860
245100
|
scope: "device",
|
|
@@ -244937,18 +245177,25 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
244937
245177
|
auth: "admin"
|
|
244938
245178
|
}),
|
|
244939
245179
|
/**
|
|
244940
|
-
*
|
|
244941
|
-
* `null` when it has no such behaviour.
|
|
245180
|
+
* Whether the camera returns home on its own when left idle, and after how
|
|
245181
|
+
* long. `null` when it has no such behaviour at all.
|
|
244942
245182
|
*
|
|
244943
245183
|
* Reolink's guard point carries one (`timeout`, freely settable in
|
|
244944
245184
|
* seconds). It is a real function of the camera that we did not expose at
|
|
244945
245185
|
* all, and it belongs next to the home it governs rather than in a vendor
|
|
244946
245186
|
* settings page nobody associates with Home.
|
|
244947
245187
|
*/
|
|
244948
|
-
|
|
244949
|
-
/**
|
|
244950
|
-
|
|
245188
|
+
getHomeReturn: require_sleep.method(zod.z.object({ deviceId: zod.z.number() }), PtzHomeReturnSchema.nullable()),
|
|
245189
|
+
/**
|
|
245190
|
+
* Set both together. Refused by a camera with no idle-return behaviour.
|
|
245191
|
+
*
|
|
245192
|
+
* They travel together for the same reason they are read together: the
|
|
245193
|
+
* underlying write carries both, so setting one alone means reading the
|
|
245194
|
+
* other back first and racing whoever else is writing.
|
|
245195
|
+
*/
|
|
245196
|
+
setHomeReturn: require_sleep.method(zod.z.object({
|
|
244951
245197
|
deviceId: zod.z.number(),
|
|
245198
|
+
enabled: zod.z.boolean(),
|
|
244952
245199
|
seconds: zod.z.number().int().min(0).max(3600)
|
|
244953
245200
|
}), zod.z.void(), {
|
|
244954
245201
|
kind: "mutation",
|
|
@@ -251201,6 +251448,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
251201
251448
|
broker: "broker",
|
|
251202
251449
|
button: "button",
|
|
251203
251450
|
cameraCredentials: "camera-credentials",
|
|
251451
|
+
cameraGridLayout: "camera-grid-layout",
|
|
251204
251452
|
cameraPipelineConfig: "camera-pipeline-config",
|
|
251205
251453
|
cameraStreams: "camera-streams",
|
|
251206
251454
|
carbonMonoxide: "carbon-monoxide",
|
|
@@ -251438,6 +251686,10 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
251438
251686
|
key: "cameraCredentials",
|
|
251439
251687
|
name: "camera-credentials"
|
|
251440
251688
|
},
|
|
251689
|
+
{
|
|
251690
|
+
key: "cameraGridLayout",
|
|
251691
|
+
name: "camera-grid-layout"
|
|
251692
|
+
},
|
|
251441
251693
|
{
|
|
251442
251694
|
key: "cameraPipelineConfig",
|
|
251443
251695
|
name: "camera-pipeline-config"
|
|
@@ -251990,6 +252242,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
251990
252242
|
brokerCapability,
|
|
251991
252243
|
buttonCapability,
|
|
251992
252244
|
cameraCredentialsCapability,
|
|
252245
|
+
cameraGridLayoutCapability,
|
|
251993
252246
|
cameraPipelineConfigCapability,
|
|
251994
252247
|
cameraStreamsCapability,
|
|
251995
252248
|
carbonMonoxideCapability,
|
|
@@ -252843,6 +253096,18 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
252843
253096
|
addonId: null,
|
|
252844
253097
|
access: "view"
|
|
252845
253098
|
},
|
|
253099
|
+
"cameraGridLayout.getLayout": {
|
|
253100
|
+
capName: "camera-grid-layout",
|
|
253101
|
+
capScope: "device",
|
|
253102
|
+
addonId: null,
|
|
253103
|
+
access: "view"
|
|
253104
|
+
},
|
|
253105
|
+
"cameraGridLayout.saveLayout": {
|
|
253106
|
+
capName: "camera-grid-layout",
|
|
253107
|
+
capScope: "device",
|
|
253108
|
+
addonId: null,
|
|
253109
|
+
access: "create"
|
|
253110
|
+
},
|
|
252846
253111
|
"cameraStreams.getBrokerStreams": {
|
|
252847
253112
|
capName: "camera-streams",
|
|
252848
253113
|
capScope: "device",
|
|
@@ -256593,7 +256858,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
256593
256858
|
addonId: null,
|
|
256594
256859
|
access: "view"
|
|
256595
256860
|
},
|
|
256596
|
-
"ptz.
|
|
256861
|
+
"ptz.getHomeReturn": {
|
|
256597
256862
|
capName: "ptz",
|
|
256598
256863
|
capScope: "device",
|
|
256599
256864
|
addonId: null,
|
|
@@ -256653,7 +256918,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
256653
256918
|
addonId: null,
|
|
256654
256919
|
access: "create"
|
|
256655
256920
|
},
|
|
256656
|
-
"ptz.
|
|
256921
|
+
"ptz.setHomeReturn": {
|
|
256657
256922
|
capName: "ptz",
|
|
256658
256923
|
capScope: "device",
|
|
256659
256924
|
addonId: null,
|
|
@@ -258466,6 +258731,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
258466
258731
|
"broker",
|
|
258467
258732
|
"button",
|
|
258468
258733
|
"camera-credentials",
|
|
258734
|
+
"camera-grid-layout",
|
|
258469
258735
|
"camera-streams",
|
|
258470
258736
|
"climate-control",
|
|
258471
258737
|
"color",
|
|
@@ -258584,6 +258850,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
258584
258850
|
"brightness",
|
|
258585
258851
|
"button",
|
|
258586
258852
|
"camera-credentials",
|
|
258853
|
+
"camera-grid-layout",
|
|
258587
258854
|
"camera-streams",
|
|
258588
258855
|
"climate-control",
|
|
258589
258856
|
"color",
|
|
@@ -258808,6 +259075,21 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
258808
259075
|
form: "single",
|
|
258809
259076
|
optional: false
|
|
258810
259077
|
}],
|
|
259078
|
+
"cameraGridLayout.getLayout": [{
|
|
259079
|
+
name: "deviceId",
|
|
259080
|
+
form: "single",
|
|
259081
|
+
optional: false
|
|
259082
|
+
}],
|
|
259083
|
+
"cameraGridLayout.saveLayout": [{
|
|
259084
|
+
name: "cells",
|
|
259085
|
+
form: "object-array",
|
|
259086
|
+
optional: false,
|
|
259087
|
+
itemField: "deviceId"
|
|
259088
|
+
}, {
|
|
259089
|
+
name: "deviceId",
|
|
259090
|
+
form: "single",
|
|
259091
|
+
optional: false
|
|
259092
|
+
}],
|
|
258811
259093
|
"cameraStreams.getBrokerStreams": [{
|
|
258812
259094
|
name: "deviceId",
|
|
258813
259095
|
form: "single",
|
|
@@ -260108,7 +260390,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
260108
260390
|
form: "single",
|
|
260109
260391
|
optional: false
|
|
260110
260392
|
}],
|
|
260111
|
-
"ptz.
|
|
260393
|
+
"ptz.getHomeReturn": [{
|
|
260112
260394
|
name: "deviceId",
|
|
260113
260395
|
form: "single",
|
|
260114
260396
|
optional: false
|
|
@@ -260158,7 +260440,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
260158
260440
|
form: "single",
|
|
260159
260441
|
optional: false
|
|
260160
260442
|
}],
|
|
260161
|
-
"ptz.
|
|
260443
|
+
"ptz.setHomeReturn": [{
|
|
260162
260444
|
name: "deviceId",
|
|
260163
260445
|
form: "single",
|
|
260164
260446
|
optional: false
|
|
@@ -264922,6 +265204,8 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
264922
265204
|
exports.GetLoggingSettingsInputSchema = GetLoggingSettingsInputSchema;
|
|
264923
265205
|
exports.GetStreamWithCodecInputSchema = GetStreamWithCodecInputSchema;
|
|
264924
265206
|
exports.GlobalMetricsSchema = GlobalMetricsSchema;
|
|
265207
|
+
exports.GridLayoutPatchSchema = GridLayoutPatchSchema;
|
|
265208
|
+
exports.GridLayoutViewSchema = GridLayoutViewSchema;
|
|
264925
265209
|
exports.HAP_AUDIO_BASE = HAP_AUDIO_BASE;
|
|
264926
265210
|
exports.HAP_AUDIO_BITRATE_KBPS = HAP_AUDIO_BITRATE_KBPS;
|
|
264927
265211
|
exports.HAP_AUDIO_VBV_KBITS = HAP_AUDIO_VBV_KBITS;
|
|
@@ -265313,6 +265597,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
265313
265597
|
exports.PtzAutotrackStatusSchema = PtzAutotrackStatusSchema;
|
|
265314
265598
|
exports.PtzAutotrackTargetOptionSchema = PtzAutotrackTargetOptionSchema;
|
|
265315
265599
|
exports.PtzHomePresetSchema = PtzHomePresetSchema;
|
|
265600
|
+
exports.PtzHomeReturnSchema = PtzHomeReturnSchema;
|
|
265316
265601
|
exports.PtzMoveCommandSchema = PtzMoveCommandSchema;
|
|
265317
265602
|
exports.PtzOptionsSchema = PtzOptionsSchema;
|
|
265318
265603
|
exports.PtzPositionSchema = PtzPositionSchema;
|
|
@@ -265715,6 +266000,7 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
|
|
|
265715
266000
|
exports.buildVideoArgs = require_canonical_hash.buildVideoArgs;
|
|
265716
266001
|
exports.buttonCapability = buttonCapability;
|
|
265717
266002
|
exports.cameraCredentialsCapability = cameraCredentialsCapability;
|
|
266003
|
+
exports.cameraGridLayoutCapability = cameraGridLayoutCapability;
|
|
265718
266004
|
exports.cameraPipelineConfigCapability = cameraPipelineConfigCapability;
|
|
265719
266005
|
exports.cameraStreamsCapability = cameraStreamsCapability;
|
|
265720
266006
|
exports.canConvertUnit = canConvertUnit;
|