@camstack/addon-model-studio 1.1.158 → 1.1.160
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-DIQ8WQL_.mjs +310 -0
- package/dist/{PrivacyMaskSettings-HGPEYu4p.mjs → PrivacyMaskSettings-CkwY1O7I.mjs} +26 -26
- package/dist/{SceneMonitorEditor-CdIUY6nw.mjs → SceneMonitorEditor-CiIMWyUb.mjs} +295 -295
- package/dist/_stub.js +402 -402
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Bc-pU5-a.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dl57Gf_x.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DtTWe8FC.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{responsive-DKi_zUXE.mjs → cap-error-DHkvpvpc.mjs} +8 -8
- package/dist/{hostInit-Ds1parg7.mjs → hostInit-Dw6HUDk0.mjs} +2 -2
- package/dist/model-studio.addon.js +71 -64
- package/dist/model-studio.addon.mjs +71 -64
- package/dist/{player-overlays-BNT83Pmw.mjs → player-overlays-DdDSY-tk.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{scene-monitor-copy-CG5RB7vj.mjs → scene-monitor-copy-BKbPs3_1.mjs} +1 -1
- package/dist/{square-COXTMEPf.mjs → square-BWowq2yB.mjs} +1 -1
- package/dist/{trash-2-Dr234XUH.mjs → trash-2-B6STAYa8.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BHgDHVD9.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DodCXtYd.mjs} +1 -1
- package/package.json +1 -1
- package/dist/MotionZonesSettings-C9YymEfU.mjs +0 -310
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-cAfFVRZp.mjs +0 -26
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.236",
|
|
40
40
|
scope: "default",
|
|
41
41
|
shareConfig: {
|
|
42
42
|
singleton: !0,
|
|
@@ -81,7 +81,7 @@ async function r() {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"@camstack/ui-library": {
|
|
84
|
-
version: "1.2.
|
|
84
|
+
version: "1.2.192",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|
|
@@ -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-CaB_hL5g.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).
|
|
@@ -6084,12 +6084,6 @@ Object.fromEntries([
|
|
|
6084
6084
|
icon: "circle-dot",
|
|
6085
6085
|
order: 40
|
|
6086
6086
|
},
|
|
6087
|
-
{
|
|
6088
|
-
id: "clips",
|
|
6089
|
-
label: "Clips",
|
|
6090
|
-
icon: "clapperboard",
|
|
6091
|
-
order: 41
|
|
6092
|
-
},
|
|
6093
6087
|
{
|
|
6094
6088
|
id: "engine",
|
|
6095
6089
|
label: "Inference Engine",
|
|
@@ -7956,6 +7950,8 @@ var EVENT_OWNER_TYPES = [
|
|
|
7956
7950
|
* nothing failing until a caller asked.
|
|
7957
7951
|
*/
|
|
7958
7952
|
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7953
|
+
/** The same list as a Zod enum, for the cap input that carries it. */
|
|
7954
|
+
var MediaPresenceOwnerKindSchema = _enum([...EVENT_OWNER_TYPES, "track"]);
|
|
7959
7955
|
new Set(EVENT_OWNER_TYPES);
|
|
7960
7956
|
var EncodeProfileSchema = object({
|
|
7961
7957
|
video: object({
|
|
@@ -14684,8 +14680,6 @@ method(object({
|
|
|
14684
14680
|
deviceId: number(),
|
|
14685
14681
|
capName: string(),
|
|
14686
14682
|
wrapperAddonId: string(),
|
|
14687
|
-
/** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
|
|
14688
|
-
sourceId: string().optional(),
|
|
14689
14683
|
active: boolean()
|
|
14690
14684
|
}), _void(), {
|
|
14691
14685
|
kind: "mutation",
|
|
@@ -21602,7 +21596,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21602
21596
|
ownerType: EventOwnerTypeSchema,
|
|
21603
21597
|
eventId: number().int(),
|
|
21604
21598
|
deviceId: number()
|
|
21605
|
-
}), array(MediaFileInfoSchema).readonly()), method(
|
|
21599
|
+
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21600
|
+
deviceId: number(),
|
|
21601
|
+
ownerKind: MediaPresenceOwnerKindSchema,
|
|
21602
|
+
ownerIds: array(string()).max(5e3)
|
|
21603
|
+
}), array(string()).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21606
21604
|
kind: "mutation",
|
|
21607
21605
|
auth: "admin"
|
|
21608
21606
|
}), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
|
|
@@ -24596,6 +24594,18 @@ method(VectorDeclareIndexInputSchema, _void(), {
|
|
|
24596
24594
|
kind: "mutation",
|
|
24597
24595
|
auth: "admin"
|
|
24598
24596
|
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
24597
|
+
_enum([
|
|
24598
|
+
"queue-full",
|
|
24599
|
+
"camera-backoff",
|
|
24600
|
+
"sleeping",
|
|
24601
|
+
"camera-refused",
|
|
24602
|
+
"no-keyframe",
|
|
24603
|
+
"no-catalog-row",
|
|
24604
|
+
"unsupported",
|
|
24605
|
+
"unknown-device",
|
|
24606
|
+
"uid-missing"
|
|
24607
|
+
]);
|
|
24608
|
+
_enum(["deferred", "final"]);
|
|
24599
24609
|
var ClipSchema = object({
|
|
24600
24610
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
24601
24611
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -24746,7 +24756,25 @@ var ClipSchema = object({
|
|
|
24746
24756
|
*/
|
|
24747
24757
|
playable: boolean().optional(),
|
|
24748
24758
|
/** Why {@link playable} is false, verbatim (`no-file-for-window`). */
|
|
24749
|
-
unplayableReason: string().optional()
|
|
24759
|
+
unplayableReason: string().optional(),
|
|
24760
|
+
/**
|
|
24761
|
+
* This clip is STILL BEING WRITTEN, so {@link ClipSchema.timeRange}`.endMs`
|
|
24762
|
+
* is not its end.
|
|
24763
|
+
*
|
|
24764
|
+
* Absent — the common case — means the row is closed and its `endMs` is the
|
|
24765
|
+
* end of the recording. Present and `true` means the source told us the file
|
|
24766
|
+
* has no end yet, and the `endMs` we carry is whatever the camera's index
|
|
24767
|
+
* entry happened to hold: on a Reolink E1 Outdoor PoE (592, measured
|
|
24768
|
+
* 2026-09-20) the newest file `…_192927_000000_…_0.mp4` reported an `endTime`
|
|
24769
|
+
* of 19:29:56 and STILL reported it eight minutes later, while the file went
|
|
24770
|
+
* on growing. A surface that drew 29 s there was lying about a clip that
|
|
24771
|
+
* plays for minutes, on the one row the operator looks at first.
|
|
24772
|
+
*
|
|
24773
|
+
* `endMs` is deliberately still a number: it is the best bound anything has
|
|
24774
|
+
* for a mint window or a byte fetch, and every consumer already requires it.
|
|
24775
|
+
* This flag says what it is WORTH, and a duration is not drawn from it.
|
|
24776
|
+
*/
|
|
24777
|
+
inProgress: boolean().optional()
|
|
24750
24778
|
});
|
|
24751
24779
|
var ClipPlaybackSchema = object({
|
|
24752
24780
|
/**
|
|
@@ -24829,59 +24857,17 @@ var ClipSourceSchema = object({
|
|
|
24829
24857
|
* alternative — a `native:reolink:* → provider-reolink` table inside the
|
|
24830
24858
|
* widget — is a second authority on provider identity living in the one
|
|
24831
24859
|
* package with no business knowing it, wrong the day a third source appears
|
|
24832
|
-
* (D557). One addon may serve SEVERAL sources
|
|
24833
|
-
*
|
|
24834
|
-
*
|
|
24835
|
-
*
|
|
24860
|
+
* (D557). One addon may serve SEVERAL sources, which is why the per-device
|
|
24861
|
+
* switch is keyed by SOURCE and not by this (D555) — `addon-provider-reolink`
|
|
24862
|
+
* served a hub child two of them until the two views were measured to be one
|
|
24863
|
+
* store read twice (D555) and then read ONE way (D565).
|
|
24836
24864
|
*
|
|
24837
24865
|
* Optional for version skew only. The collection dispatcher stamps it from
|
|
24838
24866
|
* the registry, so a row that travelled through the fan-out carries the
|
|
24839
24867
|
* authoritative id whatever the provider filled in.
|
|
24840
24868
|
*/
|
|
24841
24869
|
addonId: string().optional(),
|
|
24842
|
-
|
|
24843
|
-
* Which API this source resolved to FOR THIS CAMERA, when it has a choice.
|
|
24844
|
-
*
|
|
24845
|
-
* A source may cover one store through more than one surface — the Reolink
|
|
24846
|
-
* provider reads a hub child through the parent's event log and a standalone
|
|
24847
|
-
* through its own file list, because that is what each camera answers. The
|
|
24848
|
-
* CHOICE is the provider's, made from what the camera is, and is never a row
|
|
24849
|
-
* the operator has to understand; but it is REPORTED, because a source that
|
|
24850
|
-
* silently reads a different API on two cameras and then behaves differently
|
|
24851
|
-
* is the thing nobody can debug later. Absent when the source has only one
|
|
24852
|
-
* way to read its store.
|
|
24853
|
-
*/
|
|
24854
|
-
via: string().optional(),
|
|
24855
|
-
availability: ClipSourceAvailabilitySchema,
|
|
24856
|
-
/**
|
|
24857
|
-
* The operator switched this source OFF for this camera.
|
|
24858
|
-
*
|
|
24859
|
-
* Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
|
|
24860
|
-
* vocabulary. That enum models what the source CAN do — a sleeping camera, an
|
|
24861
|
-
* unmounted card, an index that disagrees with its own calendar — and a
|
|
24862
|
-
* switched-off source could answer perfectly well; the operator decided it
|
|
24863
|
-
* should not. Folding the choice in is how `disabled` and `broken` stop being
|
|
24864
|
-
* distinguishable, which is the D62 rule this repo has already paid for twice:
|
|
24865
|
-
* an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
|
|
24866
|
-
* and disabled must never look like broken. It is also what lets every
|
|
24867
|
-
* exhaustive consumer of the availability enum keep compiling.
|
|
24868
|
-
*
|
|
24869
|
-
* A switched-off source contributes NO clips (`listClips` never calls it) and
|
|
24870
|
-
* its row carries no `catalogAsOf`: nothing confirms a catalog it is not
|
|
24871
|
-
* allowed to serve, and a frozen age that can only grow draws a stalling
|
|
24872
|
-
* source rather than an off switch.
|
|
24873
|
-
*
|
|
24874
|
-
* The row survives BECAUSE it is the control the operator switches the source
|
|
24875
|
-
* back on from — D554 decision 4's rule ("a source that cannot answer
|
|
24876
|
-
* produces a ROW, not an absence") applied to the one case D556 carved out of
|
|
24877
|
-
* it, and D557's own kept property ("a source is never hidden, only its
|
|
24878
|
-
* rows"). Absent means on.
|
|
24879
|
-
*
|
|
24880
|
-
* A provider never sets this — like {@link ClipSourceSchema.addonId} it is
|
|
24881
|
-
* stamped by the collection dispatcher, which holds the registry's projection
|
|
24882
|
-
* of the persisted authority (D556) and is the only place that knows it.
|
|
24883
|
-
*/
|
|
24884
|
-
switchedOff: boolean().optional()
|
|
24870
|
+
availability: ClipSourceAvailabilitySchema
|
|
24885
24871
|
});
|
|
24886
24872
|
DeviceType.Camera, method(object({
|
|
24887
24873
|
deviceId: number(),
|
|
@@ -24889,13 +24875,23 @@ DeviceType.Camera, method(object({
|
|
|
24889
24875
|
until: number(),
|
|
24890
24876
|
limit: number().int().positive().optional(),
|
|
24891
24877
|
/**
|
|
24892
|
-
*
|
|
24893
|
-
*
|
|
24894
|
-
*
|
|
24895
|
-
*
|
|
24896
|
-
*
|
|
24878
|
+
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
24879
|
+
* carries, never a source id and never a list.
|
|
24880
|
+
*
|
|
24881
|
+
* Absent means the device's BOUND provider, which is CamStack on every
|
|
24882
|
+
* camera today because that is what `deviceManager.getBindings`
|
|
24883
|
+
* answers with. A provider the device is not bound to is refused by
|
|
24884
|
+
* name rather than answered by another one (D552's
|
|
24885
|
+
* `rejectUnresolvedAddonPin` rule).
|
|
24886
|
+
*
|
|
24887
|
+
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
24888
|
+
* assumed the answer was a fan-out over everything a camera has. The
|
|
24889
|
+
* operator settled otherwise on 2026-09-20 — *"il get videoclips
|
|
24890
|
+
* prendere un provider opzionale, di default va su camstack"*,
|
|
24891
|
+
* *"l'utilizzatore è uno solo"* — so the list is asked of one provider
|
|
24892
|
+
* at a time and there is nothing to filter out of it.
|
|
24897
24893
|
*/
|
|
24898
|
-
|
|
24894
|
+
provider: string().optional()
|
|
24899
24895
|
}), array(ClipSchema).readonly(), {
|
|
24900
24896
|
kind: "query",
|
|
24901
24897
|
auth: "protected"
|
|
@@ -36299,6 +36295,12 @@ Object.freeze({
|
|
|
36299
36295
|
addonId: null,
|
|
36300
36296
|
access: "view"
|
|
36301
36297
|
},
|
|
36298
|
+
"pipelineAnalytics.ownersWithMedia": {
|
|
36299
|
+
capName: "pipeline-analytics",
|
|
36300
|
+
capScope: "device",
|
|
36301
|
+
addonId: null,
|
|
36302
|
+
access: "view"
|
|
36303
|
+
},
|
|
36302
36304
|
"pipelineAnalytics.pauseForStorageMigration": {
|
|
36303
36305
|
capName: "pipeline-analytics",
|
|
36304
36306
|
capScope: "device",
|
|
@@ -40199,6 +40201,11 @@ Object.freeze({
|
|
|
40199
40201
|
form: "single",
|
|
40200
40202
|
optional: false
|
|
40201
40203
|
}],
|
|
40204
|
+
"pipelineAnalytics.ownersWithMedia": [{
|
|
40205
|
+
name: "deviceId",
|
|
40206
|
+
form: "single",
|
|
40207
|
+
optional: false
|
|
40208
|
+
}],
|
|
40202
40209
|
"pipelineAnalytics.proposeRetrainAnnotations": [{
|
|
40203
40210
|
name: "deviceId",
|
|
40204
40211
|
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-CaB_hL5g.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).
|
|
@@ -6063,12 +6063,6 @@ Object.fromEntries([
|
|
|
6063
6063
|
icon: "circle-dot",
|
|
6064
6064
|
order: 40
|
|
6065
6065
|
},
|
|
6066
|
-
{
|
|
6067
|
-
id: "clips",
|
|
6068
|
-
label: "Clips",
|
|
6069
|
-
icon: "clapperboard",
|
|
6070
|
-
order: 41
|
|
6071
|
-
},
|
|
6072
6066
|
{
|
|
6073
6067
|
id: "engine",
|
|
6074
6068
|
label: "Inference Engine",
|
|
@@ -7935,6 +7929,8 @@ var EVENT_OWNER_TYPES = [
|
|
|
7935
7929
|
* nothing failing until a caller asked.
|
|
7936
7930
|
*/
|
|
7937
7931
|
var EventOwnerTypeSchema = _enum(EVENT_OWNER_TYPES);
|
|
7932
|
+
/** The same list as a Zod enum, for the cap input that carries it. */
|
|
7933
|
+
var MediaPresenceOwnerKindSchema = _enum([...EVENT_OWNER_TYPES, "track"]);
|
|
7938
7934
|
new Set(EVENT_OWNER_TYPES);
|
|
7939
7935
|
var EncodeProfileSchema = object({
|
|
7940
7936
|
video: object({
|
|
@@ -14663,8 +14659,6 @@ method(object({
|
|
|
14663
14659
|
deviceId: number(),
|
|
14664
14660
|
capName: string(),
|
|
14665
14661
|
wrapperAddonId: string(),
|
|
14666
|
-
/** The `ClipSource.source` id to toggle. Absent = all of the addon's. */
|
|
14667
|
-
sourceId: string().optional(),
|
|
14668
14662
|
active: boolean()
|
|
14669
14663
|
}), _void(), {
|
|
14670
14664
|
kind: "mutation",
|
|
@@ -21581,7 +21575,11 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
21581
21575
|
ownerType: EventOwnerTypeSchema,
|
|
21582
21576
|
eventId: number().int(),
|
|
21583
21577
|
deviceId: number()
|
|
21584
|
-
}), array(MediaFileInfoSchema).readonly()), method(
|
|
21578
|
+
}), array(MediaFileInfoSchema).readonly()), method(object({
|
|
21579
|
+
deviceId: number(),
|
|
21580
|
+
ownerKind: MediaPresenceOwnerKindSchema,
|
|
21581
|
+
ownerIds: array(string()).max(5e3)
|
|
21582
|
+
}), array(string()).readonly()), method(SearchObjectEventsInput, array(ScoredObjectEventSchema).readonly()), method(object({}), WipeObjectEmbeddingsResultSchema, {
|
|
21585
21583
|
kind: "mutation",
|
|
21586
21584
|
auth: "admin"
|
|
21587
21585
|
}), method(RebuildObjectEmbeddingsInput, RebuildObjectEmbeddingsResultSchema, {
|
|
@@ -24575,6 +24573,18 @@ method(VectorDeclareIndexInputSchema, _void(), {
|
|
|
24575
24573
|
kind: "mutation",
|
|
24576
24574
|
auth: "admin"
|
|
24577
24575
|
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
24576
|
+
_enum([
|
|
24577
|
+
"queue-full",
|
|
24578
|
+
"camera-backoff",
|
|
24579
|
+
"sleeping",
|
|
24580
|
+
"camera-refused",
|
|
24581
|
+
"no-keyframe",
|
|
24582
|
+
"no-catalog-row",
|
|
24583
|
+
"unsupported",
|
|
24584
|
+
"unknown-device",
|
|
24585
|
+
"uid-missing"
|
|
24586
|
+
]);
|
|
24587
|
+
_enum(["deferred", "final"]);
|
|
24578
24588
|
var ClipSchema = object({
|
|
24579
24589
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
24580
24590
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -24725,7 +24735,25 @@ var ClipSchema = object({
|
|
|
24725
24735
|
*/
|
|
24726
24736
|
playable: boolean().optional(),
|
|
24727
24737
|
/** Why {@link playable} is false, verbatim (`no-file-for-window`). */
|
|
24728
|
-
unplayableReason: string().optional()
|
|
24738
|
+
unplayableReason: string().optional(),
|
|
24739
|
+
/**
|
|
24740
|
+
* This clip is STILL BEING WRITTEN, so {@link ClipSchema.timeRange}`.endMs`
|
|
24741
|
+
* is not its end.
|
|
24742
|
+
*
|
|
24743
|
+
* Absent — the common case — means the row is closed and its `endMs` is the
|
|
24744
|
+
* end of the recording. Present and `true` means the source told us the file
|
|
24745
|
+
* has no end yet, and the `endMs` we carry is whatever the camera's index
|
|
24746
|
+
* entry happened to hold: on a Reolink E1 Outdoor PoE (592, measured
|
|
24747
|
+
* 2026-09-20) the newest file `…_192927_000000_…_0.mp4` reported an `endTime`
|
|
24748
|
+
* of 19:29:56 and STILL reported it eight minutes later, while the file went
|
|
24749
|
+
* on growing. A surface that drew 29 s there was lying about a clip that
|
|
24750
|
+
* plays for minutes, on the one row the operator looks at first.
|
|
24751
|
+
*
|
|
24752
|
+
* `endMs` is deliberately still a number: it is the best bound anything has
|
|
24753
|
+
* for a mint window or a byte fetch, and every consumer already requires it.
|
|
24754
|
+
* This flag says what it is WORTH, and a duration is not drawn from it.
|
|
24755
|
+
*/
|
|
24756
|
+
inProgress: boolean().optional()
|
|
24729
24757
|
});
|
|
24730
24758
|
var ClipPlaybackSchema = object({
|
|
24731
24759
|
/**
|
|
@@ -24808,59 +24836,17 @@ var ClipSourceSchema = object({
|
|
|
24808
24836
|
* alternative — a `native:reolink:* → provider-reolink` table inside the
|
|
24809
24837
|
* widget — is a second authority on provider identity living in the one
|
|
24810
24838
|
* package with no business knowing it, wrong the day a third source appears
|
|
24811
|
-
* (D557). One addon may serve SEVERAL sources
|
|
24812
|
-
*
|
|
24813
|
-
*
|
|
24814
|
-
*
|
|
24839
|
+
* (D557). One addon may serve SEVERAL sources, which is why the per-device
|
|
24840
|
+
* switch is keyed by SOURCE and not by this (D555) — `addon-provider-reolink`
|
|
24841
|
+
* served a hub child two of them until the two views were measured to be one
|
|
24842
|
+
* store read twice (D555) and then read ONE way (D565).
|
|
24815
24843
|
*
|
|
24816
24844
|
* Optional for version skew only. The collection dispatcher stamps it from
|
|
24817
24845
|
* the registry, so a row that travelled through the fan-out carries the
|
|
24818
24846
|
* authoritative id whatever the provider filled in.
|
|
24819
24847
|
*/
|
|
24820
24848
|
addonId: string().optional(),
|
|
24821
|
-
|
|
24822
|
-
* Which API this source resolved to FOR THIS CAMERA, when it has a choice.
|
|
24823
|
-
*
|
|
24824
|
-
* A source may cover one store through more than one surface — the Reolink
|
|
24825
|
-
* provider reads a hub child through the parent's event log and a standalone
|
|
24826
|
-
* through its own file list, because that is what each camera answers. The
|
|
24827
|
-
* CHOICE is the provider's, made from what the camera is, and is never a row
|
|
24828
|
-
* the operator has to understand; but it is REPORTED, because a source that
|
|
24829
|
-
* silently reads a different API on two cameras and then behaves differently
|
|
24830
|
-
* is the thing nobody can debug later. Absent when the source has only one
|
|
24831
|
-
* way to read its store.
|
|
24832
|
-
*/
|
|
24833
|
-
via: string().optional(),
|
|
24834
|
-
availability: ClipSourceAvailabilitySchema,
|
|
24835
|
-
/**
|
|
24836
|
-
* The operator switched this source OFF for this camera.
|
|
24837
|
-
*
|
|
24838
|
-
* Deliberately NOT a member of {@link ClipSourceAvailabilitySchema}'s
|
|
24839
|
-
* vocabulary. That enum models what the source CAN do — a sleeping camera, an
|
|
24840
|
-
* unmounted card, an index that disagrees with its own calendar — and a
|
|
24841
|
-
* switched-off source could answer perfectly well; the operator decided it
|
|
24842
|
-
* should not. Folding the choice in is how `disabled` and `broken` stop being
|
|
24843
|
-
* distinguishable, which is the D62 rule this repo has already paid for twice:
|
|
24844
|
-
* an off switch is REPORTED off (`CameraStatus.switchedOff`, the same word),
|
|
24845
|
-
* and disabled must never look like broken. It is also what lets every
|
|
24846
|
-
* exhaustive consumer of the availability enum keep compiling.
|
|
24847
|
-
*
|
|
24848
|
-
* A switched-off source contributes NO clips (`listClips` never calls it) and
|
|
24849
|
-
* its row carries no `catalogAsOf`: nothing confirms a catalog it is not
|
|
24850
|
-
* allowed to serve, and a frozen age that can only grow draws a stalling
|
|
24851
|
-
* source rather than an off switch.
|
|
24852
|
-
*
|
|
24853
|
-
* The row survives BECAUSE it is the control the operator switches the source
|
|
24854
|
-
* back on from — D554 decision 4's rule ("a source that cannot answer
|
|
24855
|
-
* produces a ROW, not an absence") applied to the one case D556 carved out of
|
|
24856
|
-
* it, and D557's own kept property ("a source is never hidden, only its
|
|
24857
|
-
* rows"). Absent means on.
|
|
24858
|
-
*
|
|
24859
|
-
* A provider never sets this — like {@link ClipSourceSchema.addonId} it is
|
|
24860
|
-
* stamped by the collection dispatcher, which holds the registry's projection
|
|
24861
|
-
* of the persisted authority (D556) and is the only place that knows it.
|
|
24862
|
-
*/
|
|
24863
|
-
switchedOff: boolean().optional()
|
|
24849
|
+
availability: ClipSourceAvailabilitySchema
|
|
24864
24850
|
});
|
|
24865
24851
|
DeviceType.Camera, method(object({
|
|
24866
24852
|
deviceId: number(),
|
|
@@ -24868,13 +24854,23 @@ DeviceType.Camera, method(object({
|
|
|
24868
24854
|
until: number(),
|
|
24869
24855
|
limit: number().int().positive().optional(),
|
|
24870
24856
|
/**
|
|
24871
|
-
*
|
|
24872
|
-
*
|
|
24873
|
-
*
|
|
24874
|
-
*
|
|
24875
|
-
*
|
|
24857
|
+
* WHICH provider to ask — the `addonId` a {@link ClipSourceSchema} row
|
|
24858
|
+
* carries, never a source id and never a list.
|
|
24859
|
+
*
|
|
24860
|
+
* Absent means the device's BOUND provider, which is CamStack on every
|
|
24861
|
+
* camera today because that is what `deviceManager.getBindings`
|
|
24862
|
+
* answers with. A provider the device is not bound to is refused by
|
|
24863
|
+
* name rather than answered by another one (D552's
|
|
24864
|
+
* `rejectUnresolvedAddonPin` rule).
|
|
24865
|
+
*
|
|
24866
|
+
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
24867
|
+
* assumed the answer was a fan-out over everything a camera has. The
|
|
24868
|
+
* operator settled otherwise on 2026-09-20 — *"il get videoclips
|
|
24869
|
+
* prendere un provider opzionale, di default va su camstack"*,
|
|
24870
|
+
* *"l'utilizzatore è uno solo"* — so the list is asked of one provider
|
|
24871
|
+
* at a time and there is nothing to filter out of it.
|
|
24876
24872
|
*/
|
|
24877
|
-
|
|
24873
|
+
provider: string().optional()
|
|
24878
24874
|
}), array(ClipSchema).readonly(), {
|
|
24879
24875
|
kind: "query",
|
|
24880
24876
|
auth: "protected"
|
|
@@ -36278,6 +36274,12 @@ Object.freeze({
|
|
|
36278
36274
|
addonId: null,
|
|
36279
36275
|
access: "view"
|
|
36280
36276
|
},
|
|
36277
|
+
"pipelineAnalytics.ownersWithMedia": {
|
|
36278
|
+
capName: "pipeline-analytics",
|
|
36279
|
+
capScope: "device",
|
|
36280
|
+
addonId: null,
|
|
36281
|
+
access: "view"
|
|
36282
|
+
},
|
|
36281
36283
|
"pipelineAnalytics.pauseForStorageMigration": {
|
|
36282
36284
|
capName: "pipeline-analytics",
|
|
36283
36285
|
capScope: "device",
|
|
@@ -40178,6 +40180,11 @@ Object.freeze({
|
|
|
40178
40180
|
form: "single",
|
|
40179
40181
|
optional: false
|
|
40180
40182
|
}],
|
|
40183
|
+
"pipelineAnalytics.ownersWithMedia": [{
|
|
40184
|
+
name: "deviceId",
|
|
40185
|
+
form: "single",
|
|
40186
|
+
optional: false
|
|
40187
|
+
}],
|
|
40181
40188
|
"pipelineAnalytics.proposeRetrainAnnotations": [{
|
|
40182
40189
|
name: "deviceId",
|
|
40183
40190
|
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 "./
|
|
2
|
+
import { o as i, s as a } from "./cap-error-DHkvpvpc.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-DodCXtYd.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as e, h as t, p as n, y as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DJDHChgO.mjs";
|
|
2
|
-
import { s as i } from "./
|
|
2
|
+
import { s as i } from "./cap-error-DHkvpvpc.mjs";
|
|
3
3
|
var a = i("camera", [["path", {
|
|
4
4
|
d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
|
|
5
5
|
key: "18u6gg"
|
|
@@ -2753,7 +2753,7 @@ async function rr(e) {
|
|
|
2753
2753
|
}
|
|
2754
2754
|
}
|
|
2755
2755
|
async function ir() {
|
|
2756
|
-
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-
|
|
2756
|
+
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dl57Gf_x.mjs")).catch((e) => {
|
|
2757
2757
|
throw tr = void 0, e;
|
|
2758
2758
|
}), tr;
|
|
2759
2759
|
}
|